パソコン鳥のブログ

アクセスカウンタ

zoom RSS 重複メールをサーバで削除する

<<   作成日時 : 2016/08/09 22:40   >>

トラックバック 0 / コメント 0

複数のメーリングリストに登録されている場合は、同じメールが重複して届くことがあります。
この重複メールを 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 によるメールの自動振り分け

テーマ

関連テーマ 一覧


月別リンク

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
重複メールをサーバで削除する パソコン鳥のブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる