procmailやmaildropなど、条件によってメールを選り分けたり、どこかへ転送したり、というものを汎用で行うための「sieve」という規格がある。
実はcyrusにはこのsieveが導入されていて、dovecotでもsieveプラグインを導入することで使うことができる。
ちなみに、次期dovecot-1.2ではsieveプラグインが標準導入となるとのこと。
sieveを利用すると、maildropなどの外部のプログラムを呼び出すのではなく、dovecotのローカル配送を使って選り分けることができるため、パフォーマンス的にも有利だと思うし、一つのパッケージだけアップデートや設定を気にすればよいので、管理も楽になると思う。
そして何より、他のプラグイン、例えばdovecotのquota機能とも共存できる。
というわけで、dovecot sieve の導入の仕方。
まあ、Dovecot Wikiに書いてあったことそのまんまなんですが。
LDA/Sieve - Dovecot Wiki
sieveのコンパイルで dovecot-config を参照するため、まずdovecot本体を --enable-header-install でインストールしておきます。
> tar -zxf dovecot-1.1.5.tar.gz > ./configure --enable-header-install > make # make install
その後、dovecot-sieve をインストール
> tar -zxf dovecot-sieve-1.1.5.tar.gz > ./configure --with-dovecot=/usr/local/lib/dovecot > make # make install
/usr/local/etc/dovecot.conf の、ldaのplugin指定に cmusieve 追加
protocol lda { mail_plugins = cmusieve quota }
sieveのルールファイルは
/var/mail/【ユーザ名】/.dovecot.sieve など、ユーザのメールスプールディレクトリ直下に設定
例えば、SpamAssassinでスパム判定されたものを、SquirrelMailから見れる「spam」フォルダにつっこむ場合、下記のように .dovecot.sieve に書けばよい。
require "fileinto"; if exists "X-Spam-Flag" { fileinto "INBOX.spam"; }
振り分け先のフォルダは自動で作られるが、SquirrelMailから見れなくなるため
最初にSquirrelMailから「spam」フォルダを作っておくか
/var/mail/【ユーザ名】/subscriptions に「INBOX.spam」を書いておく。
振り分け先のフォルダ名を「INBOX.spam」と指定すると「.INBOX.spam」というフォルダに書かれ
逆に「.INBOX.spam」と「.」付きにすると動作しないことに注意。
sieveが動くと、.dovecot.sieve がコンパイルされ .dovecot.sievec というファイルが作られる。
これが出来ていれば、とりあえずsieveが動いたかどうかまでは確認ができる。
sievecが更新されるのにうまく選り分けられない場合は、ルールがおかしいということになる。
sieveのルールについてはdovecotのWikiなどを参照のこと。
http://wiki.dovecot.org/LDA/Sieve
(関連)