古川制御日記

佐賀県武雄市の組み込み開発屋ブログ

サーバー側でメール振り分け、sieveで振り分け処理記述してdovecotでLDA

すでにPostfixdovecotでメール送受信できてる状態から、サーバー側でメールのFromなどを参照してフォルダに振り分ける措置を実施したメモ

Postfix関連でやったこと

/etc/postfix/main.cf

mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"

Devocot関連でやったこと

# yum install dovecot-pigeonhole

/etc/dovecot/conf.d/

protocol lda {
    mail_plugins = $mail_plugins sieve
}
> mkdir ~/sieve/
> touch ~/sieve/master.sieve
> ln -s ~/sieve/master.sieve ~/.dovecot.sieve

問題

最初全く動作しなかった、試しにメール送ってみても届かなかった。
ログを見ると/var/log/dovecot/dovecot.logにアクセス権限が無い、というエラーがあった。
postfix/usr/libexec/dovecot/dovecot-ldaを起動してその際にログを残そうとこのファイルに書き込みに行くが権限がなくて失敗してるということだろう。
ということでこのファイルの権限を0777に変更したら動いてくれた。(よろしくなさげ)

すでに受信済のメールを振り分ける方法

~/.dovecot.sieveを書き換えれば今後受信するメールは振り分けられるけどすでに受信済のメールの扱いを振り分けたいと思い以下の手順で実施したらうまくいった。

> mkdir ~/tmp
> mv ~/Maildir/cur/* ~/tmp
> for x in ~/tmp/*
do
  /usr/libexec/dovecot/dovecot-lda < $x; echo -n .
done

これで一旦受信済フォルダ(~/Maildir/cur)から~/tmpに移動させた後にローカル配送させることで 新しいメールとして~/Maildir/curの中に配送される。 (echo -n .はただの経過表示)
もっと簡単でいいやり方がありそうな気がする。