うちのメールアドレスはほっとくと月間8,000通ぐらいのスパムメールがやってくるので当然フィルタリングしているのですが、フィルタは強力すぎると大事なメールまで葬りかねないし荒すぎるとスパムに埋もれてメールを見る気がなくなります。
ということで、うちではある程度強力にしつつ紛失の無いように 受信したメールは二つの経路に分けています。
GMailはスパム/非スパムの移動が簡単であり 同時に学習させることができるので、最近ではもっぱら(1)を常用しています。それで気づかなかったのですが、ずいぶん前から (2) で使ってる SpamAssassin が 期待通りに動いてなかったようです。
数ヶ月前に突然 procmail から spamassassin を呼び出して判定しているとうまく動作せずに空メールが送られるようになっていたので、判定は spamd を動かして spamc で行うように変更しました。たぶんこのときからだと思うのですが、下記のようなエラーメッセージがログに記録されていました。
Apr 13 09:24:10 toriyu spamd[14982]: config: failed to parse line, skipping, in "/home/takatani/.spamassassin/user_prefs": body NGWORD5 /\x46\x4d\x41\x33\x24\x4e\x25\x61\x21\x3c\x25\x6b/
設定ファイルの書式が変わったのかな? と思ってほったらかしていたのですが、じつはそうではなくて ホームディレクトリの user_prefs を読んでいませんでした。いや、設定ファイル中の行についてエラーメッセージを出してるので、正確には「読んでるけど無視されていた」ということかな。
ということで、これを解消するには下記の一行を /usr/local/etc/mail/spamassassin/local.cf に書きます。
allow_user_rules 1
いやはや、これだけのことだったのですね・・・。
ちなみに、user_prefs に書いてあることは スパムの加点条件というよりかは減点条件が中心です。メールアドレスのwhite-list であったり配信経路であったり 私の名前を使ったNGワードならぬGOODワードだったり。特に最後の項目はほとんどのスパムメールがメールアドレス(アルファベット)しか収集していませんから、2バイト文字で私のなまえとか本名とかを入れておくと高確率でスパム箱行きを防いでくれます。とはいえ、経路(2)の inbox は経路(1)のスパム箱よりも見る頻度が低いので発見が遅れることがしばしばあるんですけどね(^_^)。