IMAPでSpamassassin半自動学習
本気でSPAM撲滅を遂行してマス。やってる構成は以下のとおり。
ClamAVとかの設定は後から書くとして、
- SquirrelMailでSpamAssassinでSPAM判定されたものは自動的に「SPAM」フォルダに落とす。
- それで漏れたSPAM(False-Negative)は自宅からでも外からでも、見つけ次第「SPAMに追加」フォルダに移動。
- 「SPAM」に誤認されたもの(False-Positive)は「SPAMじゃない」フォルダに救出
- 手動振り分けされたメールをcronからsa-learnを起動して学習
- 学習終わったメールは本来のフォルダに移動
- それを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がなんか肥大化しちゃうんじゃないか〜とか勝手に思ってたり。まぁ、様子見。