Bogofilter の導入 (Meadow, Mew, Cygwin 環境)

某プロバイダのメールアドレスを持っているのだが、ありがちなユーザ名なので、スパムが大量に来る。と言うか、来るメールのほとんどがスパムと言ってよい。ちょっと前までザウルスで受信していたのだが、スパム処理が馬鹿らしくなったので、パソコンで受けてフィルタリングソフトを導入することにした。ちなみに某プロバイダではメールアドレスを変えるのに \3,000 かかるのでケチくさいが大した使っていないアドレスを変えるのにお金をかけるのはもったいないし、スパムの傾向を見るのも社会勉強だろう。

導入したソフトは BogofilterMeadow + Mew + Cygwin の環境に導入した。ついでに Mew も 4.2 へバージョンアップ。ネタとしては古いかも知れないけれど仕方ない。

ちなみに職場のメールは MS-Outlook + Exchange という環境。これはこれでいいけど。(本当か?)

以下、導入について。

cygwin の setup.exe で、

libdb4.2
libdb4.2-devel (いずれも category は database)
gsl (category は libs)

をインストールしておく。

bogofilter-0.92.8 を展開。README の通り、

./autogen.sh
make
make install

を実行。t.env と t.lock3 のテストが FAIL するが、気にしないことにする。前者は空白混じりのパスが問題。後者はよくわからないが、

test "x‘grep -v 0 $TMPDIR/exits‘" = x

の行でコケているようだ。

Mew のドキュメントにもスパム用の設定が載っているが、それを参考にしつつ、日本語スパムへの対策強化のため、nkfkakasi を使うように変えてみる。kakasi は Win32 用バイナリ使用。nkf は以前より cygwin 用にコンパイルしてインストールしてあった。

次のような newspam, newham という2つのスクリプトを作って cygwin の /usr/local/bin の下におく。

#!/bin/sh
# newspam

nkf -m -e | kakasi -w | bogofilter -s -N -v


#!/bin/sh
# newham

nkf -m -e | kakasi -w | bogofilter -n -S -v


nkf の -m オプションは知らなかったが、MIME デコードするオプション。このあたりは先人達の知恵をそのまま借用。

.emacs に次の行を入れる。これで 'ls', 'lh' コマンドでスパム/ハムを学習することができる。

(setq mew-spam-prog "bash")
(setq mew-spam-prog-args '("--login" "-c" "newspam"))
(setq mew-ham-prog "bash")
(setq mew-ham-prog-args '("--login" "-c" "newham"))

次にスパムをマークするためのスクリプトを作成する。次の内容で bogo という名のファイルを /usr/local/bin の下に作成する。

#!/bin/sh
# bogo

PATH=/bin:/usr/bin:/usr/local/bin:$PATH

for i in $*; do
nkf -e -m $i | kakasi -w | bogofilter
if [ $? -eq 0 ]; then
echo $i
fi
done

これで、'"' コマンドで 'bash /usr/local/bin/bogo' と入力するとスパムにマークがつく。多分もっと美しいやり方があるのだろうけど、とりあえず用が足りればオッケーとする。

おっと、実際はその前にスパムを学習させねばならない。スパムのメールファイルが存在するディレクトリで、

for i in *; do
nkf -e -m $i | kakasi -w | bogofilter -s
done

などとやっておけば良い。

さて現在の状況だがスパムの処理が楽になったものの、だからといって普通のメールが増えるわけではない。何か虚しいような気もするが、スパムを受けて処理するのも社会勉強ということで。