ゴミメールは特定の文字列を含んでいることがあります。 例えば、あるゴミメールフィルターでは、メールヘッダに判定結果を書き込みます。 qmail では、~/.qmail に設定を書き込むことで、 特定の文字列を含むメールを選別することができます。
ここでは、転送する前にゴミメールかどうかを判定し、 ゴミならばゴミアドレスへ、そうでなければ転送するという方法について述べます。
まず、Cシェルスクリプトで転送するメールがゴミかどうかを判定します。 ゴミならば 0, ゴミでないなら 1 という返り値を出すような Cシェルスクリプトを作っておきます。 つぎに、.qmail 内で condredirect を使って転送の設定をします。
ある文字列を含むメールをゴミメールとして判定するための Cシェルスクリプトは以下の通りです。set pattern の赤文字ところには、 スパムメールと判定できるような文字列を書き込んでおいてください。
set file = tmptmptmphogehoge set pattern = (\ 'spam-spam'\ 'Spam mail'\ ) cat - > ${file} @ m = 1 while ( $m <= $#pattern ) grep "$pattern[$m]" ${file} >& /dev/null && rm -rP ${file} && exit 0 @ m++ end rm -fP ${file} exit 1このスクリプトは、受け取ったメールがスパム文字列を含んでいたら 0 を、 そうでなければ 1 を返り値として返します。①
スクリプトを作ったら名前を付けて保存し(ここでは spamfilter.sh とします)、 実行権を与えておきます。
chmod 755 spamfilter.sh
ここでは gomimail というユーザを作って、 ゴミメールはすべてそのユーザのメールボックスに行くようにしておきます。 ユーザ gomimail を作って、Maildir 形式のメールボックスを用意しておいて下さい。 なお、gomimail のメールボックスにゴミメールを貯めておく必要がなければ、 ~gomimail/.qmail にとだけ書いておきます。
#
${HOME}/.qmail を以下のようにします。condredirect は、condredirect (転送先) (判定条件) という具合使いますが、 判定条件の返り値が 0 のときは転送先に転送して .qmail 内のそれ以降のコマンドを無視します。 判定条件の返り値が 0 以外の場合は転送先には送らないで、 .qmail 内のそれ以降のコマンドを実行します。
./Maildir/
| /var/qmail/bin/condredirect gomimail /home/LocalLibrary/bin/spamfilter.sh (| から1行で書く)
&(転送先のメールアドレス)これで、
ことになります。
- ローカルのメールボックスにはなんでも受け取る
- スパムと判定されたものは gomimail のメールボックスに行く
- スパムじゃないと判定されたもののみ、転送先のメールアドレスへ転送される