おそらく、もっとも知られている電子メール spam フィルタです。
だいぶ改良はされてきたようですが、日本語の電子メールに関する spam 認識精度の評価はそんなに良くないようです。
ですが、実際に実験(18時間ほど経過しています 12/13 22:20)してみると、
spam な電子メールの7割ほどは確実に spam として認識しています。
すり抜けはありますが、誤認識(spam でないものを spam と認識する)は今のところ全くありません。
SpamAssassin は、spamc/spamd のペアで動作する spam チェックデーモンとしての動作が可能なので、
サーバ負荷(オーバヘッド)を減らすためにこれを採用。
perl がシステムにインストールされていれば、
perl -MCPAN -e shell
の後、
install Mail::Spamassassin
install Net::DNS
install Mail::SPF::Query
で spamassassin 本体と一緒にインストールされます。
Net::DNS と Mail::SPF::Query は spamd が必要とするようです。
今回は、サーバ負荷軽減のため、spamd を使います。spamd は、こんな感じで起動。
バーチャルドメインを扱う場合、このようにするとよいでしょう:
/usr/local/bin/spamd -u spamd -d -c -l -r /var/run/spamd/spamd.pid -x --virtual-config-dir=/var/mail/%d/%l/spamassassin/spamd
SpamAssassin も完全な spam フィルタ(というか、完全なものはあり得ない)ではないので、
spam なのに spam でないと判定されたり、その逆もあります。
そのような場合、多くの Web サイトや blog には、
sa-learn --spam -u user@domain filename (spam でないと誤認識したものを spam だと学習させる)
sa-learn --ham -u user@domain filename (誤ってspam と認識したものを spamでないと学習させる)
のような形式で、手動学習させるように man sa-learn には書かれていますが、実際は全く期待通りに機能しません。
実際は、
spamc -L spam -u user@domain < filename (spam でないと誤認識したものを spam だと学習させる)
spamc -L ham -u user@domain < filename (誤ってspam と認識したものを spamでないと学習させる)
のようにします。これで、spam フィルタ機能盛り込みの目処が立ちました。