Procmail
メール関連
Procmail とは
Procmail は、メールを様々な条件によって振り分けたり、コマンドにパイプ渡ししたりすることを可能にするアプリケーションです。
メールの自動保存や SPAM のフィルタリング等に威力を発揮します。
インストール
procmail-3.15.2 の例です。
Procmail Homepageから最新のアーカイブを取得し、展開します。
% gzip -dc procmail-3.15.2.tar.gz | tar xvf - % cd procmail-3.15.2
展開したらまず、Makefile, config.h を環境に合わせて修正します。
例えば、インストール先を /usr/local/bin にしたいのであれば以下を修正します。
BASENAME = /usr/local
修正が終わったら以下のようにしてインストールします。
% make % su # make install # make install-suid
設定
.forward と .procmailrc を設定します。
これらの編集中にメールを受信してしまうとメールをロストしてしまう可能性があるので、必ずメールを受信しない状況にて編集する必要があります。
.forward の設定
以下のように $HOME/.forward を設定することにより、受信したメールを Procmail に適用するようにします。
\koumei2, "|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #koumei2"
※ koumei2 はログイン名
上記の設定で、「\koumei2」と「"|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #koumei2"」の2つの転送先を指定したことになります。
最初の「\koumei2」は特殊な指定方法で、頭に「\」がつくと、これ以上転送させずに koumei2 ユーザーにメールを格納するという指定になります。
つまり、ローカルサーバの通常のメールスプールにメールが溜まることになります。
そして、後半の「|IFS=' '...」の方ですが、この設定により Procmail にメールが渡るようになります。
.procmailrc の設定
Procmail はデフォルトで $HOME/.procmailrc の設定を読み込んで実行するので、$HOME/.procmailrc を作成します。
.procmailrc は非常に多くの設定可能な項目があるのでここではごく一部を紹介することにします。
PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin MAILDIR=$HOME/mbox DEFAULT=/var/spool/mail/koumei2 LOGFILE=$HOME/logs/procmail_`date +%Y%m`.log LOCKFILE=$HOME/.lockmail #VERBOSE=on :0 * ^TOlinux-users@linux.or.jp { :0 c $HOME/mbox/linux-users/current/. :0 c | $MHONARC -rcfile $RCFILE -add -outdir $HOME/html/linux-users/current :0 $DEFAULT } :0BHD * 9876543210^0 easygame.co.in * 9876543210^0 rlqt.com * 9876543210^0 4diamonds19 /dev/null
上記の設定で $HOME/mbox/linux-users/current の下に MH 形式(1メールにつき数字名のファイルが1つ)のメールファイルが出来、さらに MHonArc で変換した結果が $HOME/html/linux-users/current の下に作成され、/var/spool/mail/koumei2 にメールが保存されます(通常のメール受信)。
:0 から始まる一連の設定はレシピと呼ばれ、レシピはいくつでも設定可能で、構文は以下の通りとなっています。
:0 [ flags ] * [ 条件 ] 処理
また、上記の例のように「{...}」で囲むことによりレシピはネストすることが可能です。
「条件」を満たしたメールは「処理」を行い、破棄されます。
ただし、:0 c の「 c 」は、コピーの「 c 」で、この場合は条件を満たして処理を行った場合にも破棄されず、次のレシピへ渡されます。
通常、「条件」は正規表現で指定しますが、Procmail 特有の表現方法として「 ^TOlinux-users@linux.or.jp 」は、To: Cc: Bcc: のいずれかが「 linux-users@linux.or.jp 」であるという意味となり、ML のメール等を振り分けるのに非常に便利です。
:0 の後にはオプションを指定することが出来、例えば上記の2番目のレシピの例では、B はメール本体(body)をチェック、H はメールヘッダをチェックを意味します。
デフォルトではヘッダのみチェックなので、本体もチェック対象とする場合には BH と指定する必要があります。
また、B のみ指定だとヘッダはチェックされません。
D はチェックの際に大文字小文字を区別する(デフォルトでは区別しない)という意味となります。
2番目のレシピの条件の 9876543210^0 は Procmail のスコア機能を利用して条件を OR 指定する記述方法です。
「処理」に指定できる記述のうち代表的なものを以下に挙げます。
ファイル名 | 指定されたファイルにメールを保存します。既にファイルが存在する場合には追記します。 |
---|---|
ディレクトリ名 | ユニークなファイル名を付けて指定したディレクトリ以下に保存します。 |
ディレクトリ名/ | 上記と同様ですが、ファイル名は連番となります。 |
! メールアドレス | 指定されたメールアドレスに転送します。カンマで区切ることにより複数アドレスに転送可能です。 |
| コマンド | パイプで他のコマンドに渡します。 |
{} | 複数の処理を実行する場合や、さらに条件で絞り込む際にブロック指定します。 |
例の場合、メールヘッダに easygame.co.in もしくは rlqt.com もしくは 4diamonds19 が含まれている際には /dev/null に捨てることを意味しています。
procmail はレシピによって振り分けた結果をログに出力することができます。
この設定が、LOGFILE です。
上記のように設定すると、年月別のログファイルに出力するようになります。
ちなみに、コメントしている「VERBOSE=on」をコメントアウトにするとデバッグ用のログが大量に出力されますので、レシピをテストする場合には有効かもしれません。
Suspicious rcfileエラーについて
比較的新しめのバージョンでは、Suspicious rcfile .procmailrc
のようなエラーが出ることがあります。
このエラーは、以下のいずれかの状態になっている場合に、セキュリティ的に疑わしいのでrcfileは使用できないという理由で発生するようです。
・rcfile のownerが、受取人もしくはrootではない
・rcfileが誰でも書き込み可能
・rcfileがあるディレクトリが誰でも書き込み可能
・rcfileがデフォルトのrcfile($HOME/.procmailrc)で、グループ書き込み可能
・rcfileがデフォルトのrcfile($HOME/.procmailrc)で、rcfileがあるディレクトリがグループ書き込み可能