メールを受信して添付ファイルを保存するスクリプト
ありがちなんだが、手法が何パターンもあるらしくまとめるのに苦労したのでメモ。細かい問題はあるが、とりあえず動く。
追記:日本語の添付ファイルでこける。メール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 }