.mailfilterのforeachの使用例があんまり見つからなかったのでメモ。
maildrop環境の.mailfilterで
if ( /^From:.*SPAMMER/ )
{
to "maildir/.Trash/"
}
みたいな感じでSPAM処理をしていた場合、同じようにReceivedフィールドも判定しようとした時に
if ( /^Received:.*SPAMSERVER/ )
{
to "maildir/.Trash/"
}
と書いてしまうと、複数あるReceivedヘッダの内最初の1行しか判定されない。判定したいのは大抵最後の行なので役に立たない。
その場合、foreachで各行に対して判定を行う。リストをlookupさせる形にして、
SPAMSERVER
spamserver\.com
\[127\.1\.2\.3
foreach ( /^Received:.*/ )
{
if ( lookup( $MATCH, ".receivedblocklist" ) )
{
to "maildir/.Trash/"
}
}
みたいな感じにするのが良さそう。
※foreachの中では正規表現のサブパターンが使えないので、$MATCHに格納された行全体に対して行う必要がある点に注意。
コメント