Я столкнулся с проблемой открытия файлов с расширением .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)
Комментариев нет:
Отправить комментарий