spam メールと判定されないために

業務上、外国企業と英文メールをやりとりする機会がある。 ある時、米国の某企業にメールを出したのだが一週間ほど待っても返事が来ない。 相手にとっては利益につながる話なのに、おかしいな、 英語が下手だから誤解されたのかな、 でもあいつだって俺のこと知っているのに? など、あれこれ考えていたが、 ふと思いついてメールのゴミ箱を漁ってみたところ、 そこにあるではありませんか。 しっかり spam フィルターによってゴミ箱に捨てられていた。 先日 spam フィルタープログラムを入れ換えたのだが、 相手のメールアドレスを学習させ忘れていたらしい。

このように、 送ったはずのメールに返事が来ない、 届くはずのメールが届かない、 といった、spam 対策の落とし穴にはまってしまわないよう、 今回は自分の出すメールが spam メールと判定されないための対策を考えてみたい。

一般的な spam 対策とは

一般的な spam 対策はフィルタリングと呼ばれているものだ。 受信したメールを、spam からどうか選別するフィルターに通し、 spam であると判断されたものには印(件名に[MEIWAKU]など追加)をつけて、 後はメイラーの振り分け機能を使って、spam メールをゴミ箱に入れるなり、 特別なフォルダに入れておくといったことである。

spam フィルターの多くはパターンマッチングに類する手法を使っている。 単純化していうと、 ユーザーが spam メールと思うメールの文面に多く含まれる単語を集計しておき、 そういった単語が多く含まれるメールも、 また spam メールであると判断するということである。

spam かそうでないかの判断には、 ベイズ(Bayes)理論を使っているためベイジアンフィルター (Bayesian Filter)などと呼ばれている。 ベイジアンフィルターでは、あらかじめ、 ある程度の量のメールを spam とそうでは無いメールに分類しておく。 それぞれのメールに含まれる単語を数え、 ある単語が spam メールに含まれる確率を計算しておく (これを確率データベースなどとよぶ)。 調べたいメールを単語に分解し、 それぞれの単語が spam メールに含まれる確率から、 総合的に spam である確率を推定する、といったことである (詳しくは 「ベイジアンフィルタによるスパム対策 」、 「A Statistical Approach to the Spam Problem, Gary Robinson.」 などを参照のこと)。

さて、筆者のところに届く日本語の spam メールの多くは出会い系やポルノサイト なので(筆者の嗜好とは無関係と思いたい) ある程度、特徴的なキーワードが含まれている。 無難な具体例としては、 「恋愛」、 「出会い」、 「登録」といったところである。 次に多いものは懸賞当選系(○○が当りました。今すぐ登録を)のもので、 キーワードとしては、「当選」、「賞金」などである。 こういったものは本文中に必ず URL が含まれているのが大きな特徴である。

ということは、次のような、 spam メールと同じような特徴があるものの、 実際には spam では無いメールも、 spam メールと判断され、 相手が読むことがない可能性が高いということだ

先日、俺にしては珍しく宝くじを買ってみたんだが、これが当選しちゃって、
三等で賞金 300 万だー、うらやましいかー
好きなもんおごってやるから、
こないだ出会ったとかいう彼女連れて飲みにこいよー
ところでブログを始めました。
いますぐアクセスしてみてや!
オレ様のホームページ http://......jp/..../

<<間違って>> spam メールと判断してしまうことを「誤検知」とよぶ。 逆に、 間違って spam を spam で無いメールと判断してしまうことを「見逃し」とよぶ。 この二つの事象は互いに深い関連がある。 「誤検知」を避けようとすると判断が甘くなり「見逃し」が多くなる。 「見逃し」を避けようとすると判断が厳しくなり「誤検知」が多くなる。 ベイジアンフィルターでは、確率データベースを常に更新しつづけることで、 「誤検知」と「見逃し」のバランスをとるように配慮された実装が多い。

さて、相手に「誤検知」を避けてもらうことも重要だが、 こちら、メールを出す側として「誤検知」を避ける工夫にはどんなものが考えられるだろうか。

spam メールにされない工夫

最も重要なことは spam メールらしいとされるキーワードを 本文中に含めないことである。 特に相手に初めてメールを出す場合には、 本文中の単語が判定を左右することになるので要注意といえる。 難しく考えずとも、紙に手紙を書くつもりで行えば、大きな問題は無いと思われる。 その他にも、日頃からあれこれと考えている対策があるので、以下にまとめる。

(1)はじめに相手の名前を書く

Bayesian Filter では、 spam メールに含まれない確率の高い単語を重要視する。 ほとんどの spam メールは無差別に送りつけられるため、 受信者の名前は記載されていないものが多い。 きちんと名前を書くことで spam と判定される可能性を下げることができる。

(2)件名をきちんと書く

これは spam フィルター対策というよりは、目視 spam フィルター対策(*)である。 「読んで下さい」、 「ありがとうございました」、 「○○です」、 「先日の件について」 というような、 本文の内容を反映していない件名をつけている人がいる。 spam メールは特定の個人ではなく、 多くの宛先に無作為にばらまくものなので、 同じように具体性の無い件名がつけられている。 spam メールに悩んでいる人が、このような件名のメールを受けとれば、 spam で無くても、読まずにゴミ箱行きだろう。 「先週火曜日の○○打合せについての質問」、 「週末の○○ではお世話になりました」、 など、件名を見た相手が、 「あのことか」と思いつくような具体性のある内容を書くようにしよう。

(3)元のメールがあれば引用する

返事を書く場合には、元のメールを引用することで、 spam らしくないキーワードを本文に含めることができる。 メールの作法として、無用にメールを長くしないよう全文引用を避ける、 とされていたが、 spam と判定されないためには、むしろ積極的に引用すべきであろう。

(4)シグネチャーを必ずつける

多くのメイラーでは、メールの最後に署名、 シグネチャーとして次のような短い文章を自動的につける機能を持っている。

--
 清水 友晴 / (株)三菱総合研究所
   電話 : 03-XXXX-XXXX FAX : 03-XXXX-XXXX
   電子メール XYZ@mri.co.jp
    
このような短い文章でも、 相手があなたのメールを spam では無いとして spam フィルターに学習させる際に、 キーワードが登録されるはずであり、 あなたのシグネチャーのついたメールが spam と誤検知される可能性を 低くする効果が期待できる。
(5)HTML メールを使わない

そもそも HTML メールを表示しないようにしている人もいるということ、 spam メールのみならず、詐欺メールは HTML 形式で作られることが多いので、 相手に警戒される可能性がある。 HTML メールを使うことを納得してくれている相手でなければ、 テキスト形式で送るように心がけるべきである。

* 大量にメールを受けとる人は、 件名だけで重要なメールかどうか判断することが多いので、 spam によくあるような件名を持つメールは、 受信者の手によりゴミ箱行きにされてしまいやすい。

spam フィルター事故を減らすために

自分が過去に送信した 3000 通ほどのメールを、 自分の spam フィルターで判定したところ、 約 2 %が spam メールと判定された。 さほど高い水準でも無いとも思えるが、 2%のメールが相手に届いていなかった可能性もある。

ここに書いた対策は、 申し訳ないことに経験則ばかりで効果の程は確実なものではないが、 ある程度の効果は期待できる対策と思う。 せっかくのメールが spam メール業者の悪行のために、 埋もれてしまうことの無いよう、 特に「件名をきちんと書く」というところを心がけていただければ幸いである。