我正在为解析转发的电子邮件写一些代码。我不确定的是,是否有一些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,Python lib,惯例或其他)。
答案 0 :(得分:5)
与许多其他人所说的不同, 是转发电子邮件的标准,RFC 2046,“多用途互联网邮件扩展(MIME)第二部分:媒体类型”,超过十年旧。具体请参见第5.2节“消息媒体类型”。
RFC 2046背后的基本思想是将一条消息封装到另一条消息的MIME部分中,类型名为(不幸的)message/rfc822
(永远不要忘记MIME是递归的)。 MIME library of Python可以很好地处理它。
我没有对其他答案进行投票,因为它们在一个方面是正确的:每个邮件程序都没有遵循标准。例如,mutt邮件程序可以转发RFC 2046格式的邮件,但也可以转发格式。因此,在实践中,邮件程序可能无法仅处理RFC 2046,它还必须解析各种其他语法和未指定的语法。
答案 1 :(得分:2)
根据我的经验,电子邮件客户端转发/回复的方式不同。通常,您将在邮件包底部的mime中使用纯文本版本和html编码版本。邮件标题确实有一个RFC(http://www.faqs.org/rfcs/rfc2822.html "2822"),但不幸的是,邮件正文的内容超出了范围。
您不仅需要应对邮件客户端方差,还要处理用户首选项的差异。举个例子:Lotus Notes将回复放在顶部,Thunderbird回复在底部。因此,当Thunderbird用户回复Lotus Notes用户的回复时,他们可能会在顶部插入回复并将其签名保留在底部。
另一个陷阱可能是与回复链的自动换行相抗衡。
&GT;&GT;&GT;&GT;超出限制的外部回复,由单词包裹
中间回复者的邮件客户端\ n
&GT;&GT;中间回复的消息正文
&GT;上一个回复
最新回复
我不会解析该消息并将其留给用户解析。或者,我从其他项目借用代码。
答案 2 :(得分:2)
正如其他答案已经表明:没有标准,你的程序也不会完美无缺。
您可以查看标题,特别是User-Agent
标题,以查看使用了哪种类型的客户端,以及专门针对最常见客户端的代码。
要了解您应该考虑支持的客户,请查看this popularity study。各种Outlook,Yahoo!,Hotmail,Mail.app,iPhone邮件,Gmail和Lotus Notes排名很高。大约11%的邮件被归类为“不可检测”,但使用转发电子邮件中的标题您可能会做得更好。请注意,通过在电子邮件中放置图像来收集统计信息,因此结果可能会有所偏差。
另一个问题是HTML邮件,它可能包含也可能不包括纯文本版本。我不确定客户在这方面的惯常行为。
答案 3 :(得分:1)
回复/转发的标准是&gt;在每行之前预先嵌入邮件的次数,包括发送初始电子邮件的人由客户端进行整理。所以你需要在python中做的只是添加&gt;到每一行的开头。
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>")