четвер, 27 грудня 2012 р.

Робота з файлами eml в Ruby

Сьогодні зіткнувся з проблемою пошуку вкладень серед багатьох файлів з розширенням eml.

Формат eml використовується багатьма клієнтами електронної пошти, включаючи Microsoft Outlook Express, Windows Mail і Mozilla Thunderbird. Це звичайний текстовий файл у форматі MIME, що містять заголовки повідомлень електронної пошти, а також вміст повідомлення та вкладення.

Відкрити його під Linux не складає труднощів, наприклад, за допомогою поштового клієнта KMail, однак таке рішення мені здалося занадто складним.

Трохи погугливши, виявилося, що бібліотека email чудово вміє розбирати такі файли.

В результаті вийшов невеликий скрипт, який вибирає всі файли з розширенням eml у поточній директорії, і відображає в консолі текстовий вміст листа, а прикріплені файли зберігає у відповідних директоріях.
require 'mail'

Dir.glob('*.eml') do |filename|
  mail = Mail.read(filename)

  puts <<EOF
  From:    #{mail.from}
  To:      #{mail.to}
  Subject: #{mail.subject}
  Date:    #{mail.date}

EOF

  charset = mail.text_part.content_type_parameters['charset']
  puts mail.text_part.body.decoded.force_encoding(charset).encode('utf-8')

  if mail.multipart?
    dir = File.basename(filename, File.extname(filename))
    Dir.mkdir(dir) if !Dir.exists?(dir)

    mail.attachments.each do |attachment|
      file = File.open(dir + '/' + attachment.filename, 'wb') { |f| f.write attachment.body.decoded }
      puts "Saving `#{attachment.filename}`"
    end
  end

  puts "===\n\n"
end

Немає коментарів: