SpamMailEraser


はじめに

昔, netnews に何度か投稿したせいか こちらにメールアドレスを飾ってるせいか 毎日多くのスパムメールが届きます. 本当うんざりきます.

POPFile などを使い, メールを受け取る時点でスパムか否か判断し振り分けるのが世の主流のようですが, 時折 LinuxZaurus を使って外でメールを取る受け取ることもある手前, できたらプロバイダのメールサーバ (POP サーバ) からスパムを抹消したいものです.

プロバイダから取ってスパムを除いたメールを自宅で立てた専用の POP/IMAP サーバを建てて公開するという手もありますが, セキュリティの観点から あまりそのように外部にサービスを公開したくありません.

適当な間隔で POP サーバからヘッダだけ取って, 適当なルールでスパムか否か判断し, スパムだったら消すことができればいいのです. 例によってこんなツールあるはずだと思って検索してみたのですが, Windows 用のもの (SpamMailKiller ) は見つかったのですが UNIX 用のが見当たりません. Linux なら自宅で LANDISK (NAS として売られているが, 実は sh4 で動く Linux サーバ) が 24 時間動いているで, そいつにやらしたいと考えました (LANDISK による実現はこちらや, こちらを参照して下さい).

という訳で, そんな難しくなかんべということで作ってしまいました (まぁ実際は「あの機能も欲しい, この機能も欲しい」とどんどん深みにはまって 苦労しましたが...).

プログラム

目的を達成するためには, Perl なり C のソースにベタでスパム判定ルールを書き, ルールを変えたい場合はソースを書き換えるという手もあったのですが, なんか美しくありません. という訳で, もっと汎用的にホームディレクトリにルールファイルを書き, それを読んで実行するという UNIX 流なものを作りました.

ソース一式はこちらです (V0.02). メイクして出来た実行ファイルを必要に応じ適当な所にコピーしてください. メイクには GNU Rx が必要です (どうしても入手できなかった場合は MakeFile の LIB と DEF の 定義を消してください. その場合ルールの記述に正規表現が使えなくなります).

実行方法

SpamMailEraser は ~/.spamrule ファイルに記述されたルールに基づき, サーバからメールを消すか否か判定します. 通常は -e をつけて実行します.

と言ってもいきなり実行すると, ルールの記述間違いなどで大切なメールを消して しまう恐れがありますから, 以下のようなテスト用のオプションを用意しています.

ルールファイル

スクリプトファイル (.spamrule) の書式は以下の通りです.

APOP
HOST POP3 サーバ
ID POP ユーザ名
PASS POP パスワード
Command
ルール
# で始まる行はコメントです. パスワードは平文で入れるため, パーミションには注意してください. サーバが APOP プロトコルに対応してない場合, "APOP" 行を削ってください.

ルールの書式は以下の通りです.

最後の行には暗黙の ACCEPTIF TRUE があるとします.

なお, 記述ミスがある場合はその時点で処理を中断し終了します. エラーチェックはルールファイルを読み込む時点と実行時に行っています. 読み込み時のエラーチェックは命令が上に挙げたものかどうかや パラメータの数が正しいかを調べてます. 一方 LET 文や REJECTIF/ACCEPTIF 文などは, その時点で変数を探し, TRUE/FALSE を調べてますので, 探すのに失敗するとエラーになります.

あっそうそう, 一行は 1020 文字以内で書いてください.

記述例

以下はあくまで例です. EUC で保存することを忘れずに.

APOP
HOST Your.pop.server.net
ID hogehoge
PASS ******
# はじまり
Command
# はじまり

# ヘッダに 8bit を流すメール
SET TMP _: \8bit
REJECTIF TMP

# html なんていらね
SET TMP Content-Type: \nocase text/html
REJECTIF TMP

# 韓国語はよめましぇん
SET TMP Content-Type: euc-kr
REJECTIF TMP

# [未承諾広告]は要りません
SET TMP $Subject: 未承諾広告※
REJECTIF TMP

正規表現を使うともっといいでしょう.

履歴

注意・免責事項・その他


[戻る]