メールを受信して添付ファイルを保存するスクリプト

ありがちなんだが、手法が何パターンもあるらしくまとめるのに苦労したのでメモ。細かい問題はあるが、とりあえず動く。

追記:日本語の添付ファイルでこける。メールIDがメールサーバによってこける。細かくない・・・。

[MailDownload.rb]

require 'net/pop'
require 'rubygems'
require 'tmail'

pop = Net::POP3.new( 'メールサーバ', 110 )
pop.start( 'アカウント', 'パスワード' )
if pop.mails.empty? then
  puts 'no mail.'
else
 i=1
  pop.each_mail do |m|   # or "pop.mails.each ..."
    File.open( 'inbox/' + m.unique_id , 'w' ) {|f|
      f.write m.pop
    }
    #m.delete
    i += 1
  end
  puts "#{pop.mails.size} mails popped."
end
pop.finish

[AttachmentSave.rb]

require 'net/pop'
require 'rubygems'
require 'tmail'
require 'fileutils'
require 'find'
require 'action_mailer'

inboxDir="メールのディレクトリ"
attachDir="分離した添付ファイルのディレクトリ"

Find.find(inboxDir) {|fname|
	p fname
	if File.file?(fname)
	    email=TMail::Mail.load(fname)
		if email.has_attachments?
		    email.attachments.each do |att|
				content = att.read
				file = attachDir + "\\" + att.original_filename
				File.open(file, 'wb') {|f|
					f.write content
				}
		    end
    	        end
  	end
}