図1や前述のように、SpamAssassinの仕組みは単純だ。標準入力を介して判定したいメールを入力させると、その判定結果が標準出力に帰ってくる。
このため、どのようにSpamAssassinを起動させるかは特に規定されておらず、メールサーバ上の実装に委ねられる。ただしほとんどの場合、「Procmail」と呼ばれるメールを振り分けるためのツール(オープンソース)を併用することが多い(関連記事)。
一般的に多くのUNIXサーバ環境では、ユーザーのホームディレクトリ直下に「.forward」というファイルを配置すると、すべてのメールに対してファイル内に記述した指定方法を適用できる。この仕組みを利用すれば、特定のプログラムにメール内容を丸ごと引き継ぐことができるのだ。具体的には、.forwardファイルとして、次の内容のファイルを記述すると、Procmailへと渡される指定になる。
"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #ユーザー名"
Procmailは、ユーザーのホームディレクトリにある.procmailrcファイル内容を参照して、振り分け処理を行う。.procmailrcファイルの内容で、SpamAssassinを起動させてスパムを振り分けるようにするのだ。すでに説明したように、SpamAssassinは、スパムを判定し、表1に示した3つのヘッダを書き込む。
スパムと判定された場合には、
X-Spam-Status: Yes
とメールヘッダが付加されるため、スパムメールの仕分けができるという仕掛けだ。SpamAssassinはあくまでもスパム判定のみを行うツールである。そこで例えば、次のような.procmailrcファイルを配置する例を挙げてみよう。
:0fw
*!^X-Spam.*
|/usr/bin/spamassassin
:0:
* ^X-Spam-Status: Yes
spam/
上記の指定は、次のような意味だ。
1. X-Spamのメールヘッダが含まれていない場合に限り、SpamAssassinを起動させる。「!^X-Spam.*」の最初と最後の文字列は正規表現の一種だ。正規表現自体の解説はここでは割合するが、簡単に言えば文字パターンを判別するための条件指定だと考えればよいだろう。
2. X-Spam-Statusのメールヘッダが「Yes」の場合には、ユーザーディレクトリ直下のspamディレクトリへメールを移動させる指定だ(この場合「spam」ディレクトリをあらかじめ用意しておく)。「^X-Spam-Status: Yes」という条件を指定することで、SpamAssassinの実行の結果、「X-Spam-StatusがYesであった」――すなわち、スパムと判定されたときには、spamフォルダへと移動するという処理をしている。
この.procmailrcファイルは一例であり、特に「2.」の場合は、環境によってディレクトリ名を変更するなどの処理が必要だろう。
Copyright © ITmedia, Inc. All Rights Reserved.