代码之家  ›  专栏  ›  技术社区  ›  Tomasz Zieliński

解析转发的电子邮件

  •  9
  • Tomasz Zieliński  · 技术社区  · 16 年前

    我正在给你写一些代码 作语法分析

    确切地说,我不知道转发电子邮件的“布局”是否包含在某些标准或建议中,或者它是否经过多年的发展,所以现在大多数电子邮件客户端都会为文本部分生成类似的输出:

        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
    

    如果它仍然不够精确,我会澄清它,只是我不100%确定该问什么(RFC、Python库、约定或其他)。

    4 回复  |  直到 11 年前
        1
  •  2
  •   ryan v    16 年前

    根据我的经验,几乎所有的电子邮件客户端都会以不同的方式转发/回复。通常,在邮件包底部的mime中会有一个纯文本版本和一个html编码版本。邮件头确实有一个RFC( http://www.faqs.org/rfcs/rfc2822.html "2822"

    您不仅要应对邮件客户端的差异,还要应对用户偏好的差异。例如:LotusNotes将回复放在顶部,而Thunderbird回复放在底部。因此,当Thunderbird用户回复LotusNotes用户的回复时,他们可能会在顶部插入回复,在底部留下签名。

    另一个陷阱可能是与链条的文字包装有关。

    >>>>超出限制的外部回复,被
    中间回复者的邮件客户端\n
    &燃气轮机&燃气轮机;中间回复的消息正文
    &燃气轮机;先前的答复
    最新答复

    我不会解析消息,而将其留给用户在他们的头脑中解析。或者,我会借用另一个项目的代码。

        2
  •  5
  •   sandstrom    11 年前

    转发电子邮件的标准, RFC 2046 ,“多用途Internet邮件扩展(MIME)第二部分:媒体类型”,已有十多年历史。特别参见第5.2节“消息媒体类型”。

    RFC 2046背后的基本思想是将一条消息封装到另一条消息的MIME部分,类型为(不幸的是) message/rfc822 (永远不要忘记MIME是递归的)。这个 MIME library of Python 我能处理得很好。

    我没有否决其他答案,因为它们在一个方面是正确的:并不是每个邮递员都遵循这个标准。例如 mutt

        3
  •  2
  •   Thomas    16 年前

    正如其他答案已经表明的那样:没有标准,你的程序也不会完美无缺。

    您可以查看标题,尤其是 User-Agent 标题,以查看使用了哪种类型的客户端,以及专门为最常见的客户端编写的代码。

    要找出你应该支持的客户,看看 this popularity study . 各种各样的前景,雅虎!,Hotmail、Mail.app、iPhone Mail、Gmail和Lotus Notes排名靠前。大约11%的邮件被归类为“无法检测”,但使用转发的电子邮件的标题,您可能会做得更好。请注意,统计数据是通过在电子邮件中放置图像收集的,因此结果可能会有偏差。

    另一个问题是HTML邮件,它可能包含也可能不包含纯文本版本。我不确定客户在这方面的通常行为。

        4
  •  1
  •   Gazler    16 年前

    回复/转发的标准为>在每行前加上嵌套邮件的次数,包括发送初始电子邮件的人,由客户端进行排序。因此,在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>")
    
    推荐文章