自前サーバで 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 フォルダに振り分け、それ以外はデフォルトのフォルダに保存する場合には以下のようなスクリプトになります。全般的に事例が少ないので苦労しましたが、メーラーに向かってプログラミングするというのは新鮮ですね。リアルタイムで構文チェックしてくれるところも便利です。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9054
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。