Python, извлечь необработанное содержимое из файла mbox

В файле mbox я сохранил несколько электронных писем: они также могут использовать MIME. Они должны быть извлечены как они есть в файле mbox, без модификаций, с помощью скрипта Python3. Я попробовал следующий код:

import mailbox

for message in mailbox.mbox('mboxfile'):
    mstring = message.as_string()
    print(mstring)

Кажется, это печатает необработанное содержимое электронных писем. Электронные письма в mbox не всегда используют \r\n для всех своих новых строк: иногда они имеют только \n. В любом случае, в выводе message.as_string() всегда используется \n, как указано в страница руководства.

В руководстве также говорится (около as_string()):

Обратите внимание, что этот метод предоставляется для удобства и может быть не самым полезным способом сериализации сообщений в вашем приложении, особенно если вы имеете дело с несколькими сообщениями.

Я не могу полностью понять, что может означать это предложение. Мой файл mbox, очевидно, содержит несколько электронных писем, и я хотел бы извлечь их все. Прежде всего, я хотел бы получить точно те же необработанные электронные письма, которые там хранятся, без никакой модификации и сохраняя для каждой строки свой оригинал \r\n или \n, как если бы я использовал cat в файле mbox. Так:

  • Является ли мой код правильным способом сделать это?
  • Если нет, то какой путь будет правильным?

person BowPark    schedule 23.06.2017    source источник


Ответы (1)


Если вы хотите содержимое без каких-либо изменений, вы можете просто print() каждый message:

import mailbox

for message in mailbox.mbox('mboxfile.mbox'):
    print(message)

Файлы с расширением .mbox представляют собой просто длинные простые текстовые файлы: https://en.wikipedia.org/wiki/Mbox


Также ознакомьтесь с модулем email для обработки сообщений электронной почты в качестве альтернативы: https://docs.python.org/3/library/email.message.html

person martin-martin    schedule 21.06.2018