複数のメーリングリストに登録されている場合は、同じメールが重複して届くことがあります。
この重複メールを procmail の機能を使用してメールサーバで削除する方法です。
事前確認
/etc/postfix/main.cf の allow_mail_to_commands 行に、下記のように forward が含まれているか確認して下さい。
含まれていないと、今回の設定は行えません。
/etc/postfix/main.cf
allow_mail_to_commands = alias,forward,include
次に procmail が存在するか確認します。
CentOSでは /usr/bin/procmail にあります。
または、procmail -v を実行してみます。
procmail が使用できる場合は、バージョン情報などが表示されます。
重複メール削除の事前準備
procmail の機能を使用します。
ホームディレクトリ下に .procmailrc ファイルを作成して下さい。
.procmailrc
MAILDIR=$HOME/Maildir/ DEFAULT=$MAILDIR LOGFILE=/dev/null LOG=- :0 Wh: $MAILDIR/msgid.lock | formail -D 16384 $MAILDIR/msgid.cache
なお、メールを別アドレスに転送している人は、ホームディレクトリ下に .forward があるはずです。
その場合は、本記事の以降の「メール転送させる場合」の手順に従って、転送先アドレスを .procmailrc の末尾に記述して下さい。
.procmailrc ファイル作成後、下記を実行します。
chmod 600 .procmailrc
重複チェックは、メール中の Message-Idヘッダーの値でチェックします。
Message-Id はメールごとに一意な値なので、同じ値のメールが届いたら、そのメールを処理しないようにするのが先の .procmailrc での内容です。
到着したMessage-Idヘッダーの値は、$HOME/Maildir/msgid.cache ファイルに保存されます。
このファイルのサイズの最大値が .procmailrc 中の数値 16384 です。
この値にしておけば、少なくとも過去100通程度のメールに対しては漏れなく重複チェックされます。
重複メール削除開始
.forward を以下の内容で作成し、chmod 600 .forward します。
ダブルクォーテーションを忘れずに記述して下さい。
.forward
"|/usr/bin/procmail -f-"
元から転送で .forward があった場合は、先の「重複メールを削除させる為の事前準備」の手順でその内容を .procmailrc に記述しているはずです。
元の .forward の内容は消して、上記そのまま記述して下さい。
これで、重複メールがサーバで削除されるようになります。
最後に、念のため、自分宛てにメールして届くか確認しましょう。
間違いがあると、一切メールが届かなくなってしまいます。
重複メール削除どころではなくなりますので、必ず、確認して下さい。
なお、 procmail で処理したメールのログを採るには、.procmailrc の LOGFILE で出力先ファイルを指定します。
一通ごとに、次の書式でログが出力されます。
-From test@xxxx.example.com Tue Jul 25 10:13:41 2016 Subject: =?iso-2022-jp?B?GyRCPXVKIcVhITwlayVGJTklSCM0GyhC?= Folder: formail -D 16384 /home/test2/Maildir/msgid.cache 1735
メール転送させる場合
メールを別アドレスに転送する場合は、転送先アドレスを .procmailrc の末尾に次のように追加します。
転送先アドレス先頭の「!」を忘れずに書いてください。
例えば、test@example.com へ転送していた場合は下記を追加します。
.procmailrc の末尾に追加
:0 c !test@example.com
複数のアドレスに転送させていた場合は、半角スペースで区切って記述します。
転送先アドレスを書く行の先頭に「!」を忘れずに書いてください。
.procmailrc の末尾に追加
:0 c !test-aaa@example.com test-bbb@example.com
なお、重複メール削除せずにそのまま転送したい場合は、.forward にそのアドレスを追加記述します。
.forward
"|/usr/bin/procmail -f-" test-ccc@example.com
以上、重複メールをサーバで削除する方法でした。
参考
ユグドラシルの木漏れ日: Postfixで重複したメールを削除するには (Procmail)
PROCMAIL
Linux Memo/procmail – ISM PukiWiki
Procmailによるメール振り分け設定 – 九州工業大学 学生自治ネットワーク委員会
FreeBSD – procmail
procmail をもう少し使いこなしてみる – いますぐ実践! Linuxシステム管理 / Vol.214
procmail用の.forward設定の源流を探る – 玉虫色に染まれ!
Procmail によるメールの自動振り分け
コメント