メールを受信して添付ファイルを保存するスクリプト・修正版1
仕様変更して、とりあえず修正してみた。
[MailDownload.rb]
require 'net/pop' require 'rubygems' require 'tmail' emailAccount = "メールアカウント" emailPassword = "メールパスワード" indextime = Time.now.strftime "%Y%m%d%H%M%S" pop = Net::POP3.new( 'メールサーバ', 110 ) pop.start( emailAccount , emailPassword ) if pop.mails.empty? then puts 'no mail.' else i=1 pop.each_mail do |m| # or "pop.mails.each ..." File.open( 'inbox/' + indextime + "_" + i.to_s , '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 'nkf' inboxDir ="メールファイルのディレクトリ" #メールファイルのディレクトリ attachDir="添付ファイルの出力先" #添付ファイルの出力先 Find.find(inboxDir) {|fname| if File.file?(fname) email=TMail::Mail.load(fname) if email.has_attachments? email.attachments.each do |att| content = att.read decfname="" if att.original_filename[0..15].upcase == '=?ISO-2022-JP?B?' then att.original_filename.split(" ").each do |b64| b64.gsub!(/=\?ISO-2022-JP\?B\?/i, '') b64.gsub!(/\?=/, '') decfname+=NKF.nkf('-mB -s', b64) end else decfname = att.original_filename end file = attachDir + "\\" + File.basename(fname) + "_" + decfname print "Mail File Name : " + fname + "\n" print "Attached File Name : " + decfname + "\n" print "Attached File Output: " + file + "\n" File.open(file, 'wb') {|f| f.write content } end end end }