2008年9月18日木曜日

Postfixで重複したメールを削除するには (Procmail)

下記のようにエイリアスでメールアドレスをグループ化しています。

/etc/alias

hogehoge:hoge@fuga.com,foo@fuga.com,piyo@fuga.com

fugafuga:hoge@fuga.com,bar@fuga.com,baz@fuga.com

この場合、To:hogehoge,fugafugaでメールを送信すると、hoge@fuga.comに同じメールが2通届いてしまします。
sendmailを使用していた時は重複するメールが自動的に削除されていたようですが、Postfixでは動作が異なるようです。

そこでメールの振り分けや削除に使われるProcmailを使用してみました。
重複メールを削除する設定(全員)を/etc/procmailrcに記述します。
ちなみに個人単位で設定するには、/home/(ユーザ名)/.procmailrcに記述します。

/etc/procmailrc

PATH=/usr/bin
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR/
LOCKFILE=$MAILDIR/msgid.lock
:0 Wh:
| formail -D 8192 $MAILDIR/msgid.cache

各ユーザーの.forwardにprocmailを使用する設定を記述します。
これを記述しなければ通常の動作になります。

/home/(ユーザ名)/.forward

"| exec procmail" #ダブルクォーテーション「""」も含めて記述します。

動作としましては、受信したメールのメッセージIDをMaildir/msgid.cacheに保存しておき、同じメッセージIDを持つメールを受信した場合は削除します。
メッセージIDは常にユニークですので、誤って削除されることはありません。

.forwardは転送設定ですので、他のアドレスに転送する場合は"| exec procmail"の次の行から記述します。
この記述を行うと、転送時にローカルに残す為の「~/Maildir/」を記述しなくても強制的にローカルに残されました。
逆に「~/Maildir/」を記述すると、ローカルに2通届いてしまいます。

※Postfix 重複でここに来る方々が多いです。みんな困っているんですね。

2 件のコメント:

匿名 さんのコメント...

これ探していました。助かりました、ありがとうございます。

Leaf さんのコメント...

古い情報ですが、お役に立てて良かったです。