BLOGTIMES
2017/01/03

サーバーサイドのメール振り分けを maildrop から Pigeonhole Sieve に

  Tips dovecot  postfix  thunderbird 
このエントリーをはてなブックマークに追加

Thunderbird Sieve Extension - サーバーサイドのメール振り分けを maildrop から Pigeonhole Sieve に

自前サーバで IMAP を使う利点はサーバサイドでメールのフォルダ振り分けができることにあります。

これまではメールの振り分けに Courier maildrop を使っていたのですが、MTA を qmail から Postfix に乗り換えたところ、Postfix の仕様でバーチャルドメインの配送( virtual_transport = virtual )では .forward が使えないということで、思い切って配送に Dovecot LMTP (virtual_transport = lmtp:unix:private/dovecot-lmtp) を使うようにしてみました。

Dovecot LMTP を配送に使ったとしても、依然として maildrop や procmail 等の外部プログラムの呼び出しはできません。しかしながら、Dovecot には Sieve*1 と呼ばれているメール向けのフィルタリング言語を実装した Pigeonhole という処理系がプラグインとして含まれています。今回はこれを有効化してやることで、maildrop や procmail 等の外部プログラムを起動できなくても Dovecot だけでフィルタリング処理を完結させるように構築してみました。

フィルタリングの定義はメーラーから変更できる

これまでサーバサイドにあるフィルタリングの定義のメンテナンスは ssh でログインしてターミナルから行っていました。Pigeonhole には ManageSieve Server というフィルタリングの定義を管理するためのサーバ機能が用意されており、これを使うと ssh 等を使わずにフィルタ定義のメンテナンスが可能です。このプロトコル自体は RFC 5804 - A Protocol for Remotely Managing Sieve Scripts で定義されているようです。

このプロトコルに対応したクライアントは何種類もあるようですが、僕は普段、メーラとして Thunderbird を使っているので、Thunderbird Sieve Extension を使うことにしました。

注意点としてはプロジェクトのサイト thsmi/sieve にも書いてあるように SASL Plain と Login にしか対応していないことと、現状の Thunderbird 最新版 ( 45.6.0 ) で動作させるためには Development Builds に置いてある最新版 ( sieve-0.2.3h.xpi ) を使う必要があることでしょうか。

例えば X-ML-Name が foo か bar か baz の場合には INBOX.foobarbaz フォルダに振り分け、それ以外はデフォルトのフォルダに保存する場合には以下のようなスクリプトになります。全般的に事例が少ないので苦労しましたが、メーラーに向かってプログラミングするというのは新鮮ですね。リアルタイムで構文チェックしてくれるところも便利です。

require ["fileinto","mailbox","imap4flags", "editheader"]; if header :is "X-ML-Name" ["foo","bar","baz"] { addheader :last "X-Filtered" "foobarbaz"; fileinto :create "INBOX.foobarbaz"; stop; } #keep;

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→http://blog.cles.jp/item/9054
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン