# encoding: UTF-8 require 'mail' $message = { html: {}, plain: {} } def get_email_part(part, type) if part.multipart? part.parts.each do |p| get_email_part(p, type) end end if part.content_type.include?("text/#{type}") && !(part['Content-Disposition'].to_s.include?('filename')) begin $message[type.to_sym] = { body: part.decoded, charset: part.content_type_parameters[:charset]} rescue => error puts "#{error.message}" end end end if ARGV[0] email_str = File.open(ARGV[0], "r:UTF-8", &:read).force_encoding('UTF-8').encode('UTF-8', invalid: :replace, undef: :replace, replace: '?') email = Mail.read_from_string(email_str) get_email_part(email, 'plain') get_email_part(email, 'html') # second approach output = [] output << "=#=from_name=#=" output << email[:from].addrs.first.display_name.to_s if !email[:from].addrs.nil? output << "=#=end_from_name=#=" output << "=#=from_email=#=" output << email.from.first.to_s if !email.from.nil? output << "=#=end_from_email=#=" output << "=#=subject=#=" output << email.subject.to_s output << "=#=end_subject=#=" output << "=#=to=#=" if !email.to.nil? && email.to.kind_of?(Array) output << email.to.join(', ') elsif email.to.kind_of?(String) output << email.to end output << "=#=end_to=#=" output << "=#=cc=#=" if !email.cc.nil? && email.cc.kind_of?(Array) output << email.cc.join(', ') elsif email.cc.kind_of?(String) output << email.cc end output << "=#=end_cc=#=" output << "=#=reply_to=#=" if !email.reply_to.nil? && email.reply_to.kind_of?(Array) output << email.reply_to.join(', ') elsif email.reply_to.kind_of?(String) output << email.reply_to end output << "=#=end_reply_to=#=" output << "=#=received=#=" output << email.date.strftime('%Y-%m-%d %H:%M:%S').to_s output << "=#=end_received=#=" output << "=#=message_plain=#=" output << $message[:plain][:body] output << "=#=end_message_plain=#=" output << "=#=message_html=#=" output << $message[:html][:body].to_s output << "=#=end_message_html=#=" output << "=#=message_plain_charset=#=" output << $message[:plain][:charset].to_s output << "=#=end_message_plain_charset=#=" output << "=#=message_html_charset=#=" output << $message[:html][:charset].to_s output << "=#=end_message_html_charset=#=" puts output else puts 'file must be provided' end