debiancdn

AWS, Content Delivery Network and Debian

日別アーカイブ: 2006/07/06

DIONのspamサービスでひっかけた元のメールをbogofilterにつっこむスクリプトをこさえてみた

DION迷惑メールフィルターというやつを使っている。

こいつは、迷惑メールだと判定したら、

 X-DION-Antispam: YES

というヘッダをつけてくれるので、これをprocmailでひっかけて専用のdirにいれていた。

ぜんぶおまかせしておけばまあ、それでいいわけだが、その結果をbogofilterにつっこもうと

おもった。

この処理されたメールはmime multipartで1st partに

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
添付のメールはDION迷惑メールフィルターにて迷惑メールと判定されました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

とかいうのがはいって、2nd partに元のメール本文がはいっている。

この内容をbogofilterにくわせりゃいいというわけでつくってみた。

はじめてTMailつかってみたけどけっこういいかんじだ。

libtmail-ruby1.8とbogofilterがあればたぶん動くはずだな。

まあはしらせると、

"/home/yaar/Mail/meiwaku/5921"
Subject: Get FREE 3 Months of Starz + $100 Rebate with Dish Network!
# 258 words, 1 message

みたいなのが表示されて、学習した結果は、trash-learned行き。

あまりでかいmailは学習対象からはずしてもみた。

#!/usr/bin/env ruby
require 'tmail'
learneddir = "#{ENV['HOME']}/Mail/trash-learned/"
loader = TMail::MhLoader.new("#{ENV['HOME']}/Mail/meiwaku")
#loader = TMail::MhLoader.new("#{ENV['HOME']}/Mail/meiwakutest")
loader.each_port do |port|
  puts
  p port.filename
  mail = TMail::Mail.new(port)
  if mail.multipart?
    mail.parts.each do |m|
      if m.main_type == 'message' and m.body.size <= 32768
        begin
          so = TMail::Mail.parse(m.body)
          puts 'Subject: ' + so.subject 
          
          IO.popen("bogofilter -s -vv", "w") do |bogo|
            bogo.puts m.body
          end
          
          bf = File.basename(port.filename)
          backupfile = learneddir + bf
          File.rename(port.filename, backupfile)
        rescue
          p $!
        end
      end
    end
  end
end