sample.extend.lua

sample.extend.lua にベイジアンフィルタに食わせる例があった

ということで、とりあえず gmail から過去1日分とってきて SpamAssassin に食わせてみた。
gmail 表示言語が日本語の場合のエンコードがわからんかったので、English(US) に変更してから作業。

~/.imapfilter/gmailspam.lua

account1 = IMAP {
       server = 'imap.gmail.com',
       username = 'gmailユーザ名',
       password = 'パスワード',
       ssl = 'ssl3'
}

result = account1['[Gmail]/Spam']:sent_since(form_date(1))
messages = account1['[Gmail]/Spam']:fetch_message(result)

result = {}
for msgid, msgtxt in pairs(messages) do
    if (pipe_to('/usr/local/bin/sa-learn --spam --progress --dbpath /var/tmp', msgtxt) == 1) then
        table.insert(result, msgid)
    end
end

account1['[Gmail]/Spam']:delete_messages(result)

ファイルを作ったらimapfilter -v -c ~/.imapfilter/gmailspam.luaで実行した。

sa-learn コマンドの引数のうち –dbpath は本番で使うときは不要かもしれない。
今回は自分のユーザ権限で新たに作成してみた。

更に ‘[Gmail]/All Mail’ 対象で sa-learn –ham するとよい。ただし All Mail の場合は delete_messages すると大変なことに…

(追記)Spamの文面はどうせナマモノなので、月に1度最初から作り直しということにして

  • [Gmail]/Spam から全部ひっぱってきて食わせる
  • All Mail 側は日常 POP3 で拾ってローカルに持っておいて食わせる

という方針がいいんではないか。

(更に追記)sa-learn を1メールごとに起動すると、毎回bayesファイルの読み込みで時間を食うので、
メールをファイルに一度置いてから一気に食わせる方が圧倒的に速くなるはず。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。