Парсинг пересланной электронной почты

Я пишу некоторый код для парсинга пересланной электронной почты. То, что я не уверен, - то, если бы, возможно, существует некоторая библиотека Python, некоторый RFC, которого я мог бы придерживаться или некоторый другой ресурс, который позволил бы мне автоматизировать задачу.

Чтобы быть точным, я не знаю, охвачено ли "расположение" пересланной электронной почты некоторым стандартом или рекомендацией, или если это только что развилось за эти годы поэтому теперь, большинство почтовых клиентов производит подобный вывод для текстовой части:

    Begin forwarded message: 

    > From: Me <me@me.me>
    > Date: January 30, 2010 18:26:33 PM GMT+02:00
    > To: Other Me <other-me@me.me>
    > Subject: Unwise question

- и взбеситесь для вложений (и независимо от того, что другие разделы MIME могут быть там).

Если это все еще не будет достаточно точно, то я разъясню его, это просто, что я не на 100% уверен, что спросить о (RFC, lib Python, конвенция или что-то еще).

10
задан Tomasz Zieliński 3 November 2014 в 17:36
поделиться

4 ответа

в моем опыте всего лишь о когда-либо адрес электронной почты клиента вперед / неверно. Обычно у вас будет простой текстовый версию и HTML-кодированная версия в MIME в нижней части почтового пакета. Заголовки почты имеют RFC ( http://www.faqs.org/rfcs/rfc28222.html "2822" ), но, к сожалению, содержание тела сообщения выходит на внешнюю сторону.

Не только вы должны бороться с отклонением почтового клиента, но и дисперсию пользовательских настроек. В качестве примера: Lotus Notes ставит ответы на вершину и громкости ответов на дно. Поэтому, когда пользователь Thunderbird отвечает на ответ пользователя Lotus Notes, они могут вставить свой ответ сверху и оставить свою подпись внизу.

Другим ловушкой, возможно, боротся с словом обманки отвеченных цепей.

>>>> Наружный ответ, который проходит предел, и это слово, обернутое
Почтовый клиент среднего слова \ N
>> Сообщение Тело среднего ответа
> Предыдущий ответ
Новый ответ

Я бы не разобрал сообщение и оставлю его пользователю, чтобы разбирать в своих головах. Или я буду брать код из другого проекта.

2
ответ дан 4 December 2019 в 01:31
поделиться

Стандарт для ответа / вперед является> Добавить каждую строку Количество раз, когда почта вложен, включая ВОЗ Отправлено начальное электронное письмо - это зависит от клиента. Так что вам нужно сделать в Python, просто добавьте> к началу каждой строки.

imap Test <imap@gazler.com> Wrote:
>
>twice
>imap Test wrote:
>> nested
>>
>> imap@gazler.com wrote:
>>> test
>>>
>>> -- 
>>> Message sent via AHEM.
>>>   
>>
>

Вложения просто просто должны быть привязаны к сообщению или по мере того, как вы поставили его «идти с ума».

Я не знаком с Python, но верю, что код будет:

string = string.replace("\n","\n>")
1
ответ дан 4 December 2019 в 01:31
поделиться

Как уже указывает на другие ответы: нет стандарта, а ваша программа не будет безупречной.

Вы можете взглянуть на заголовки, в частности uter-agent заголовок , чтобы увидеть, какой клиент использовался, и код специально для самых распространенных клиентов.

Чтобы узнать, какие клиенты вы должны подумать о поддержке, посмотрите на это исследование популярности . Различные прогнозы, Yahoo!, Hotmail, Mail.app, Mail iPhone, Gmail и Lotus Notes Roade высоко. Около 11% почты классифицируется как «необнаружимый», но используя заголовки из направленного электронного письма, который вы можете сделать лучше, чем это. Обратите внимание, что статистика собиралась, поместив изображение внутри электронной почты, поэтому результаты могут быть перекошены.

Другая проблема - HTML Mail, которая может или не может включать в себя простой текстовую версию. Я не уверен в обычном поведении клиентов в этом отношении.

2
ответ дан 4 December 2019 в 01:31
поделиться

В отличие от того, что говорили многие другие люди, существует стандарт на пересылаемую электронную почту, RFC 2046 , "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types", более десяти лет. См. специально его раздел 5.2, "Тип носителя".

Основная идея RFC 2046 заключается в том, чтобы инкапсулировать одно сообщение в часть MIME другого типа, названного (к сожалению) message/rfc822 (никогда не забывайте, что MIME является рекурсивным). Библиотека MIME компании Python прекрасно справляется с этим.

Я не стал приводить внизу другие ответы, потому что они верны в одном отношении: стандарту следуют не все почтовые агенты. Например, отправитель mutt может переслать сообщение в формате RFC 2046, но также и в формате adhoc. Таким образом, на практике почтовый отправитель, вероятно, не может обрабатывать только RFC 2046, он также должен разобрать различные другие и недоопределённые синтаксисы.

5
ответ дан 4 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: