今どきのスパムメール対策

はじめに

Gmail は確かにスパムメールへの対応が優秀だ。 一方で、Gmail以外のメールアドレスも持っている場合はどう対処するのが良いだろうか。

最近のBiglobeのスパム判定は優秀

自分は長らくBiglobeのメールアドレスを持っている。

自宅マシンはLinuxで受信してIMAPサーバー経由でメーラーで読む。(BiglobeへのメールはGmailにも転送をする。)

Biglobeのアドレスで受信するメールのうち、近頃は迷惑メールの割合のほうが多く、迷惑メールでないものは1割以下である。

迷惑メールフィルターを搭載しているThunderbirdを使っていても、手動でマークする必要がある場合が多い。

どうにかならんものかと調べていたら、Biglobeでもスパムメール判定機能があることを最近知った。これを有効にするとSubjectに [spam]と入れてくれるようになる。 これがかなり優秀で、判定されたメールはほぼ迷惑メールである。(もちろん判定できていない場合もある。)

Biglobeの場合は、迷惑メール判定するだけなら無料で利用できる。(迷惑メールブロックサービス|メール)

Procmailのレシピ例

自宅Linuxマシンではfetchmailで取り込み、procmailで振り分けをしている。この[spam]判定されたメールの処理をメモしておく。

# スパム判定されたものはハジく
:0
* ^Subject:.*(iso-2022-jp|UTF-8)
* ^Subject:.*\/.*
* ? echo "$MATCH" | nkf -mw | egrep -i '\[spam\].*'
{
    # SPAM判定されたメールは .spam に格納する。copyで次の処理を継続
    :0c
    .spam/
    # LASTFOLDERは直前に処理したファイル名。
    # ファイル名の/以降を変数 $tailに格納
    :0
    * LASTFOLDER ?? /\/[^/]+$
    { tail=$MATCH }
    # procmail 処理終了後処理で cur に移動、ファイル末尾に 既読マーク":2,S"をつける
    TRAP="/bin/mv $LASTFOLDER .spam/cur/$tail:2,S"
    # HOST変数をクリアしておく(なぜ?)
    HOST
}
[spam]判定されると SubjectはBASE64でエンコードされるので、まずはエンコードされているかを判定している。

エンコードされていて[spam]の文字列があれば、この後の処理が実行される。

.spamフォルダに振り分けるのだが、そのままだと既読にならない。 迷惑メールを手動で既読処理するのは避けたい。

なので、後半はIMAPのnewフォルダからcurフォルダに移動し、ファイル名の末尾に”:2,S”を付加する。これで既読になる。 (このような処理が必要なのはIMAPの仕様。興味があれば各自で調べて欲しい。)

後半の処理はかなり強引だが、今のところは問題はなさそうだ。

なお、この処理の元ネタはprocmail で Maildir 振り分け時に imap の状態を既読にする設定 – World Wide Walkerである。

おわりに

近頃の迷惑メールはフィッシングメールが多く、文面も巧妙になっている。 ベイジアン・フィルターでも迷惑メールと非迷惑メールの差を検出するのは難しそうだ。 長くbsfilterを使っているが、有効でない場合も多い。

また、Procmailの迷惑メール対策レシピも自分なりに書いているが、イタチゴッコである。

Biglobeのメールサーバーのように優秀な迷惑メールフィルターが利用できるなら試してみる価値はあると思う。 Subjectに[spam]が挿入されていれば、メーラー側で振り分けルールを設定するのも楽だろう。