No more spam!

はじめに

昨年、「特定商取引に関する法律施行規則の改正」によって、Subject に「未承諾広告※」という文字列が入っていれば、どんな spam をどれだけ大量に送信しても合法とみなす法改正が認められました。

この法改正は、1.Subject に「未承諾広告※」と書いてあれば内容や量は問わない、2.エンコード方法(mime,charcode)は規定しない[*] という点で非常にやっかいです。つまり、

などという、サーバーを管理する側から見ると明らかに欠陥と思われる点が含まれています。どちらかというとこれは個人のプライバシー保護とかという法律ではなく、spam業者保護法案といった感じの法律となっています。spam業者からの差し金で制定されたとしか考えられません。

*…2003年2月10日追記:文字コードは本文と一緒にしなければならないという制限はありますが、結局本文と一緒であればどんな文字コードを使ってもよいことになるので、フィルタリングする側から考えればすべてのケースを考える必要があります。最近は Shift_JIS なメールもありうるわけで。

しかし、成立してしまったものはしょうがないので、しばらくは(さらに改正されることを信じて)自衛の策に出るしかありません。

Exim 4.21 以降

Exim は、もともと英語圏で開発されたため、他のSMTPサーバーと同じくマルチバイト対応はしていませんでした。が、拙作ですが iconv を通すパッチを作り、それが公式に採用されたため、バージョン 4.202 以降からマルチバイトメールのヘッダによるフィルタリングができるようになりました。Exim は、受信したメッセージのヘッダに含まれる MIME 文字列をデコードし、さらに文字コードを utf-8 に統一します。このことにより、ユーザーが自分自身のフィルターの中で、簡単に日本語メッセージの振り分けができるようになりました。

普通に、こんなことができます:

if $h_subject: contains "未承諾広告" then
  fail text "Yes, this is a spam!"
endif

よさげでしょ?

インストール・設定

単に、ヘッダの MIME デコードをして、iconv ライブラリを利用して文字コード変換しているだけです。exim 4.20 までは非公式パッチとしてこのページでパッチを公開していましたが、exim 4.202 以降は、公式に取り込まれたので、特別なパッチは必要ありません。

インストールの際に Local/Makefile を編集しますが、この際、

HEADER_DECODE_TO="ISO-8859-1"

という行を、次のように書き換えてください。

HEADER_DECODE_TO="utf-8"

これで、フィルターに渡されるメールヘッダは utf-8 にデコードされるようになります。メール本文については未対応ですが、要望があれば対応します。

リンク

次のサイトを参考にしました。