Python - 获取多部分电子邮件的正文

时间:2015-05-28 21:45:44

标签: python email multipart

我收到一封包含以下代码的电子邮件:

m = imaplib.IMAP4_SSL(MailReceiveSRV)
m.login(MailReceiveUSER, MailReceivePWD)
m.select("Inbox")
status, unreadcount = m.status('INBOX', "(UNSEEN)")
unreadcount = int(unreadcount[0].split()[2].strip(').,]'))
items = m.search(None, "UNSEEN")
items = str(items[1]).strip('[\']').split(' ')
for index, emailid in enumerate(items):
    resp, data = m.fetch(emailid, "(RFC822)")
    email_body = data[0][1]
    mail = email.message_from_string(email_body)
    for part in mail.walk():
        body = part.get_payload()

仅供参考:这始终是示例代码的一部分。

但是身体现在是一个物体的biiig列表。如果Content_Type是纯文本,那将更容易。

我现在如何才能访问该邮件的正文?

1 个答案:

答案 0 :(得分:3)

简短回答

您有一个多部分电子邮件。这就是您获取列表而不是字符串的原因:get_payload如果是多部分消息,则会返回Message的列表,如果是&string则返回Message #39;不是。

说明

来自the docs

  

返回当前有效内容,当is_multipart()True时为is_multipart()个对象,Falseget_payload时为字符串。< / p>

因此if email_message.is_multipart(): for part in email_message.get_payload(): body = part.get_payload() # more processing? else: body = email_message.get_payload() 返回一个列表。

获取正文的代码如下:

is_multipart()

再次,from the docs

  

请注意,True返回True并不一定意味着&#34; msg.get_content_maintype()==&#39; multipart&#39;&#34;将返回is_multipart。例如,当True类型为 message / rfc822 时,Message将返回opencv_java249.dll