いつもお世話になっております。
メール受信時に内容を解析し、情報を取得したいと考えています。
メールはテキストメールでありHTML形式ではございません。
メールのテンプレートは下記のようになります。
(省略) --------------------------------------------------------------------- [受注番号] 000000-20170205-0000000 [日時] 2017-02-05 00:00:00 [注文者] 名前 太郎 (ナマエ タロウ) 様 〒123-0000 東京都 (TEL) 090-0000-4444 [支払方法] クレジット [ポイント利用] 1000 [配送方法] 郵便 [配送日時指定] [備考] ●備考 --------------------------------------------------------------------- [ショップ名] *********** ========== [送付先] 名前 太郎 (ナマエ タロウ) 様 〒123-0000 東京都 (TEL) 090-0000-4444 [商品] 商品名(商品番号) サイズ:XL カラー:ブルー ※オプション:無し 価格 6,0000(円) x 1(個) = 6,0000(円) (税込、送料込) 獲得ポイント660 ********************************************************************* 小計 6,0000(円) 送料 0(円) 離島・一部地域では別途料金が必要な場合があります --------------------------------------------------- 合計 6,0000(円) --------------------------------------------------------------------- 今回のお買い物で獲得するポイント 660 --------------------------------------------------------------------- *消費税について 消費税率 8% 消費税計算順序 1商品毎に消費税計算 1円未満消費税端数 切り捨て --------------------------------------------------------------------- (省略)
受信したメールを出力するプログラムは下記になります。
# -*- encoding: utf-8 -*- #------------------------------------------------- # Ruby script to get a mail via alias of postfix. #------------------------------------------------- require 'mail' class GetMail def trigger dt = Time.now.strftime("%Y%m%d_%H%M%S%L") @out_file = "/home/info/Document/#{dt}.txt" open(@out_file, "w+") do |f| mail = Mail.new($stdin.read) f.puts "From: #{mail.from.first}" f.puts "To: #{mail.to.first}" f.puts "Date: #{mail.date}" f.puts "Subject: #{mail.subject}" f.puts "Body:\n#{mail.body}" end rescue => e $stderr.puts "[#{e.class}] #{e.message}" e.backtrace.each{|trace| $stderr.puts "\t#{trace}"} exit 1 end end exit unless $0 == __FILE__ GetMail.new.trigger
この方法ではテキストファイルで出力されるのですが、必要な情報を取得するのに正規表現で取得しなければいけなく使いにくいです。
テキストファイル以外の扱いやすい形式で出力したいのですが、何かオススメはありませんか?
###追記・備考
使用言語 Ruby
1件辺りのメールの容量は4KB程度です。
送信者側のフォーマットは決まっておりますので、受信者側で解析、変換したいと考えております。
メールはテキストでメールであり、HTMLメールではありません。
回答4件
あなたの回答
tips
プレビュー