使用python imap和电子邮件包获取电子邮件的正文

biz*_*ger 4 python email python-2.7

我想使用python imap和email包检索电子邮件的正文(仅文本).

根据这个SO线程,我使用以下代码:

mail = email.message_from_string(email_body)
bodytext = mail.get_payload()[ 0 ].get_payload()
Run Code Online (Sandbox Code Playgroud)

虽然它在某些情况下工作正常,但有时候我会跟随响应

[<email.message.Message instance at 0x0206DCD8>, <email.message.Message instance at 0x0206D508>]
Run Code Online (Sandbox Code Playgroud)

biz*_*ger 7

我的主要问题是在bodytext中显示为消息实例的已回复或转发的消息.

使用以下代码解决了我的问题:

bodytext=mail.get_payload()[0].get_payload();
if type(bodytext) is list:
    bodytext=','.join(str(v) for v in bodytext)
Run Code Online (Sandbox Code Playgroud)


tri*_*eee 7

您假设消息具有统一的结构,具有一个明确定义的"主要部分".事实并非如此; 可能有单个部分的消息不是文本部分(只是二进制文件的"附件",没有其他内容)或者它可以是具有多个文本部分的多部分(或者,根本没有)甚至是如果只有一个,则不必是第一部分.此外,还有嵌套的多部分(一个或多个部分是另一个MIME消息,递归地).

用这么多的话来说,你必须检查MIME结构,然后决定哪些部分与你的应用程序相关.如果您只接收来自相当静态的一小组客户端的消息,您可能会削减一些角落(至少在下一次升级Microsoft Plague命中之前),但一般来说,根本就没有任何类型的层次结构,只是一组(不一定总是直接相关)同等重要的部分.