NGワードで迷惑メール対策

 最近、レイバンを名乗ったメールがしょっちゅう押し寄せてくる。最初は、さくらインターネットの迷惑メールで学習させて、弾いていたが、楽天やヤフーやLINEなどのメールのように偽装して送られてくるようになり、迷惑メールと判定され難くなったので、もう「レイバン」を含むメールは、全て迷惑メールとして、扱うことにした。

NGワードで登録しようと思っても、そんな機能はさくらのコントロールパネルにはなく、登録できない。さくらのサイトによると、さくらの迷惑メールの判定には、spam assassinというツールを使っているということだった。

ウェブメールのメールフィルタ機能 – さくらのサポート情報

 

 さらにspam assassinについて調べると、spam assassinの個別ユーザー用のファイルuser_prefsを用意して、そこでメール本文と禁止ワードをマッチングさせて、禁止ワードが含まれてた場合にはspam点数を加算してしまえば良さそうだ。ただ、メールの本文とNGワードをマッチさせようとすると、アルファベットは問題ないが、カタカナだとマッチしない。日本語でマッチさせる方法がわからず、JIS, Shift JIS, UTF-8, UTF-16文字コードに変えたらマッチしないか試した結果、メールの題・本文内(HTMLタグを含まない)には、UTF-16文字コードでマッチしたので、それぞれのカタカナの文字をUTF-16文字コードで指定した。なぜ、UTF-16だと上手く行くのかは、perlにもSpamAssassinにも詳しくないので謎。元のメールのエンコードを気にする必要がないのは、便利。

 

 

文字をUTF-16のコードに変換

\x{30ec}\x{30a4}\x{30d0}\x{30f3}

 

user_prefsの中身

# Ray-ban or rayban
body RAYBAN_EN /Ray\-Ban|rayban/i
describe RAYBAN_EN Contains 'Ray-ban or rayban'
score RAYBAN_EN 7.0


#レイバン UTF-16
body RAYBAN_KATAKANA /\x{30EC}\x{30A4}\x{30D0}\x{30F3}/
describe RAYBAN_KATAKANA Contains 'Rayban' in Katakana
score RAYBAN_KATAKANA 7.0

 

 FTPアップローダーで隠しフォルダになっている/home/(アカウント名)/.spamassassin/を開き、そこにuser_prefs(拡張子なしでUTF-8で保存)をアップすれば、すぐにNGワードが適用された。

 

body RAYBAN_KATAKANA /\x{30EC}\x{30A4}\x{30D0}\x{30F3}/

この部分は、Unicodeのコードポイントでの指定も有効でした。

body RAYBAN_KATAKANA /\N{U+30EC}\N{U+30A4}\N{U+30D0}\N{U+30F3}/

 

 NGワードが見つかった場合には、下記のように7.0を加点した。

score RAYBAN_EN 7.0

 SpamAssassinを通したメールのヘッダーのX-Spam-Statusを見るとrequired=7.0とあり、さくらインターネットの迷惑メール判定の閾値は、7.0ということがわかる。それ以上だと迷惑メールだと判定するため、7.0を加点した。ただし、スコアは、加点だけでなく、減点もあるため、どんなメールでも一発アウトのNGワードにするためには、10点ぐらい加点するか、迷惑メール判定の閾値を下げるかしても良いかもしれない。

 

さよなら、レイバン