活用編:メールフィルタリング(procmail)
procmailを使うと、レシピと呼ばれるルールに基づいて、メールの振り分け(以下フィルタリング)が行えます。
ここでは、簡易スパム対策で個人的に使用しているレシピ「Subject(件名)」またはBody(本文)に特定の文字列が記述されていたら、メールの削除または特定のディレクトリに保存する」を記述しました。
サーバ側で先に削除または別のディレクトリに移動されているので、メーラに入ってこないのが良い点だと思います。
nkf の用意
日本語でフィルタリングを行うため、「nkf」と呼ばれるプログラムを用意します。
ここからダウンロードできます。インストール方法については、ダウンロードファイル内にある説明ファイルをご参照ください。
.procmailrc の作成
レシピを記述するファイルです。ホームディレクトリ直下に作成します。
※ファイルのオーナーとグループはそのユーザを指定してください。
基本部の記述内容
.procmailrc に下記を記述します。
PATH=/bin:/usr/bin
SHELL=/bin/sh
LOGFILE=$HOME/procmail.log
※詳細についてはこちらがとても参考になります。
※3行目はログファイルの設定です(この場合、ホームディレクトリ直下にログができます)。初めはテストでログをとった方が良いかもしれません。
レシピの記述
.procmailrc に必要に応じてレシピ(その1~その5)を記述します。
仮にすべてを記述した場合は、記述した順番に実行されます。
※詳細については同様にこちらがとても参考になります。
レシピで使用している各コマンドの補足)
※各レシピに記述されているnkfのオプション -mw の「m」はMIMEデコードを行います(=?ISO-2022-JP?XXXを人間に分かる文字に変換)。また、「w」はUTF8に変換します(EUCの場合は「e」を指定)。
※各レシピに記述されているsedのオプション 's/[[:space:]]//g' は、スペース・タブを取り除く指定です。
※各レシピに記述されているegrepのオプション -i は、対象文字列に英字が含まれている場合、大文字と小文字を区別しない指定です。また対象文字列を|(パイプ)で区切ることで複数指定できます。
ということで下記がレシピ(例)です。
・レシピ1 - 件名に「テスト」が入っていたら ~/trash/ にメールを移動
:0
* ^Subject:.*/.*
* ? echo "$MATCH" | nkf -mw | sed 's/[[:space:]]//g' | egrep -i 'テスト'
$HOME/trash/.
・レシピ2 - 件名に「未承諾」または「広告」が入っていたら削除
:0
* ^Subject:.*/.*
* ? echo "$MATCH" | nkf -mw | sed 's/[[:space:]]//g' | egrep -i '未承諾|広告'
/dev/null
・レシピ3 - 本文に「テスト」が入っていたら ~/trash/ にメールを移動
:0B
* ? nkf -w | egrep -i 'テスト'
$HOME/trash/.
・レシピ4 - 本文に「未承諾」または「広告」が入っていたら削除
:0B
* ? nkf -w | egrep -i '未承諾|広告'
/dev/null
・レシピ5(おまけ) - コピーを残して指定したメールアドレスに転送
:0 c
! webmaster@shikabo.ddo.jp
※転送先メールアドレスが複数ある場合は、「カンマ」区切りで指定します。
・レシピ6(おまけ ※複合) - 件名に「Logwatch」が入っていたら、コピーを残して指定したメールアドレスに転送
:0 c
* ^Subject:.*/.*
* ? echo "$MATCH" | grep -i 'Logwatch'
! webmaster@shikabo.ddo.jp
※転送先メールアドレスが複数ある場合は、「カンマ」区切りで指定します。
テストメールを送信してみる
初めはログ(procmail.log)を設定した状態で、ワザと件名や本文中にレシピにヒットする文字列を記述してメールテストを行ってみます。
その後ログをみて、削除や指定したディレクトリにメールが移動されていれば、ログ設定を外すなどして運用します。


