maildropの.mailfilterでReceivedフィールドの判定をする

.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に格納された行全体に対して行う必要がある点に注意。

コメント