02 января 2012

Как открыть файл .eml под Linux?

Я столкнулся с проблемой открытия файлов с расширением .eml, когда ко мне пришло несколько писем, отправленные из MS Outlook. Оказывается, эта программа, если нажать на кнопку "переслать письмо" (форвард), перед пересылкой упаковывает его в файл .eml. Открыть его под Linux не составляет труда, например, с помощью почтового клиента Mozilla Thunderbird, однако такое решение мне показалось слишком тяжеловесным. На самом деле, когда я немного почитал документацию, оказалось, что .eml является простым текстовым файлом. Причем, письмо в этом файле соответствует rfc822, а в стандартной библиотеке Python есть модуль email, который прекрасно умеет разбирать такие файлы.
В результате вышел небольшой скрипт, который можно сохранить, например, под именем uneml.py. Скрипт принимает в качестве параметров имя или имена файлов .eml, отображает в консоли текстовое содержимое письма, а прикрепленные файлы сохраняет в текущем каталоге.

import sys, email

DELIMITER_SIZE = 60

def printMes(mes):
print '\n' + '-' * DELIMITER_SIZE
print mes
print '-' * DELIMITER_SIZE + '\n'


for arg in sys.argv[1:]:
try:
message = email.message_from_file(open(arg, 'r'))

printMes(arg)

for part in message.walk():

if part.get_content_maintype() == 'multipart':
continue

if part.get('Content-Disposition') is None:
print part.get_payload(decode=1)
continue

filename = part.get_filename()
if not(filename):
filename = "___.txt"
print "%s saving" % filename

fp = open(filename, 'wb')
fp.write(part.get_payload(decode=1))
fp.close

except:
printMes ("%s is not email" % arg)

Комментариев нет: