IMAPでSpamassassin半自動学習

本気でSPAM撲滅を遂行してマス。やってる構成は以下のとおり。

ClamAVとかの設定は後から書くとして、

  1. SquirrelMailでSpamAssassinSPAM判定されたものは自動的に「SPAM」フォルダに落とす。
  2. それで漏れたSPAM(False-Negative)は自宅からでも外からでも、見つけ次第「SPAMに追加」フォルダに移動。
  3. SPAM」に誤認されたもの(False-Positive)は「SPAMじゃない」フォルダに救出
  4. 手動振り分けされたメールをcronからsa-learnを起動して学習
  5. 学習終わったメールは本来のフォルダに移動
  6. それをBecky!POP3で取り込み。

cron.dailyあたりに登録すれば、翌日には学習完了、という算段。Becky!での取り込みを考えるとcron.hourlyでもいいかも。

/usr/local/sbin/auto-sa-learn

#!/bin/sh

MAILDIR_BASE=~hogeuser/Maildir
MAILDIR_SPAM=.INBOX.SPAM
MAILDIR_FALSENEGATIVE=.INBOX.SPAM\&MGuP\,VKg-
MAILDIR_FALSEPOSITIVE=.INBOX.SPAM\&MFgwgzBqMEQ-

cd $MAILDIR_BASE/$MAILDIR_FALSENEGATIVE/
for path in cur/* ; do
	[ ! -f $path ] && continue
	fname=`basename $path`
	mv cur/${fname} tmp/${fname}_sa-learn
	/usr/bin/sa-learn --spam tmp/${fname}_sa-learn
	mv tmp/${fname}_sa-learn $MAILDIR_BASE/$MAILDIR_SPAM/cur/${fname}
done

cd $MAILDIR_BASE/$MAILDIR_FALSEPOSITIVE/
for path in cur/* ; do
	[ ! -f $path ] && continue
	fname=`basename $path`
	mv cur/${fname} tmp/${fname}_sa-learn
	/usr/bin/sa-learn --ham tmp/${fname}_sa-learn
	mv tmp/${fname}_sa-learn $MAILDIR_BASE/cur/${fname}
done

一応False-Negativeの動作は確認したんだけど、Positiveの方は未経験。SquirrelMailのフォルダ振り分けタイミングがよくわからんので、ループするかも。

あと気になるのは、Maildirのファイルを勝手に移動したりしてOKなのか、という点。dovecot-uidlistがなんか肥大化しちゃうんじゃないか〜とか勝手に思ってたり。まぁ、様子見。