モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

maildrop使わずにdovecotでメール選り分け

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のルールについてはdovecotWikiなどを参照のこと。
http://wiki.dovecot.org/LDA/Sieve


(関連)

ファイルシステムのquotaを利用しないでメールスプールの容量制限を掛ける - モーグルとカバとパウダーの日記