・ついでだから忘れないうちに続きを書いておこう :-)
従来、メールの読み書きは POP3 なメールサーバから mew で直接やりとりしていたのだけど、途中で bogofilter を経由させることを考えると mew でやりとりするよりも fetchmail で取りこんだメールを procmail に食わせて、その時点で bogofilter をかけるようにするのが見通しが良さそう、ということであちこちの設定を変更。
まず .mew.el で POP サーバを指定しているあたりをコメントアウト。 つぎに、~/.fetchmailrc でメールサーバやアカウントの情報を登録。
defaults proto pop3 mda "/usr/bin/procmail" poll XXX.XXX.jp user "kojima" password "hogehoge"
/.fetchmailrc で mda /usr/bin/procmail を指定していると、fetchmail は取りこんで きたメールを mda で指定したプログラム(procmail)に投げる処理をする(通常は mda として sendmail なり postfix なりを指定して、ローカルに再配送させる)。
procmail では、届いたメールのそれぞれに対して bogofilter を実行し、結果によって spam か ham かを区別するように ~/.procmailrc を設定
PATH=/bin:/usr/bin:/usr/local/bin MAILDIR=$HOME/Mail DEFAULT=$MAILDIR/inbox/. LOGFILE=$MAILDIR/procmail.log LOCKFILE=$HOME/.lockmail :0 HB * ? nkf -m -e | kakasi -w | bogofilter newspam/. :0: inbox/.
この設定で、mime デコード + EUC 化して(nkf -m -e)、単語間に空白を入れた(kakasi -w)メールを bogofilter に判断させ、spam と判断されたものは ~/Mail/newspam ディレクトリに、ham と判断されたものは ~/Mail/inbox に送られることになる。
メールを読む時(MUA)は mew のままで、inc すると inbox をそのまま更新して、新しくメールが落ちてきていたらそのまま表示してくれる。
気が向いた時に mew で g して +newspam を指定すると、spam と判断されたメールを一覧することができ、誤って判断されているメールがあれば適宜救助する。
これで基本的なところはできたけど、どうせだから fetchmail を定期的に実行しようと、crontab -e で cron に登録。
0-59/10 * * * * /usr/bin/fetchmail -s
これで 10 分に一度 fetchmail が起動され、メールサーバからメールを取ってきて、
/Mail/newspam か ~/Mail/inbox かに分類してくれる。
とりあえずこれで様子を見ているけど、まぁまぁうまく分類してくれているみたい。 まだ半日くらいしか試してないけど、 50通くらい newspam に落ちていて、spam が ham に分類された例が1例あった程度だから、そこそこの確度じゃないかな?ある程度 newspam やら inbox が溜ったら、再度 bogofilter のデータベースに登録してやれば判定精度は上がりそうだし、しばらくはこれで運用してみる予定。
なお、これらの設定をするのに、ネット上の各種情報を参考にしました。一々参照したサイトは上げませんが、google で bogofilter について日本語で解説しているページが参考になりました。あらためて各ページの著者に御礼申し上げます (_ _)
vjhskx veyiquxfq puxotab eseassq tsnsdr rbtyqcx ....といった暗号のような spam が届くなぁ、、と思ってたんだけど、これって、 bogofilterのような単語の出現頻度によって spam か否かを判断するフィルター対策 としてランダムに生成した文字列でメールを作っているんだな。どうやら添付している HTML なパートに意味のある情報が記されているみたいだけど、そっちは見たことがないや(苦笑)
しかし、このあたりもイタチごっこになっているのか。。-- kojima 2004-04-22 (木) 22:46:32