我收到一封包含以下代码的电子邮件:
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是纯文本,那将更容易。
我现在如何才能访问该邮件的正文?
答案 0 :(得分:3)
您有一个多部分电子邮件。这就是您获取列表而不是字符串的原因:get_payload
如果是多部分消息,则会返回Message
的列表,如果是&string
则返回Message
#39;不是。
来自the docs:
返回当前有效内容,当
is_multipart()
为True
时为is_multipart()
个对象,False
为get_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
。