IMAP获取发件人姓名和正文文本?

2024-06-16 10:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用以下代码:

import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login(myusername, mypassword)
mail.list()
# Out: list of "folders" aka labels in gmail.
mail.select("inbox") # connect to inbox.

result, data = mail.search(None, "ALL")

ids = data[0] # data is a list.
id_list = ids.split() # ids is a space separated string
latest_email_id = id_list[-1] # get the latest

result, data = mail.fetch(latest_email_id, "(RFC822)") # fetch the email body (RFC822) for the given ID

raw_email = data[0][1] # here's the body, which is raw text of the whole email
# including headers and alternate payloads

print raw_email

它可以工作,除了,当我打印raw_email时,它返回一堆额外的信息,比如说,我如何解析这些额外的信息,并只获取From和body文本?


Tags: oftheididsdatarawisemail
1条回答
网友
1楼 · 发布于 2024-06-16 10:31:36

Python的email包可能是一个很好的起点。

import email
msg = email.message_from_string(raw_email)

print msg['From']
print msg.get_payload(decode=True)

不过,当一封电子邮件包含多个部分(附件、文本和正文的HTML版本等)时,事情会变得更复杂一些。

在这种情况下,msg.is_multipart()将返回True,msg.get_payload()将返回一个列表而不是一个字符串。在email.message文档中有更多信息。

或者,与其解析原始的RFC822格式的邮件(如果电子邮件包含附件,则可能非常大),不如直接向IMAP服务器请求所需的信息。将mail.fetch行更改为:

mail.fetch(latest_email_id, "(BODY[HEADER.FIELDS (FROM)])")

只需从服务器请求(并返回)电子邮件的From行。同样,将第二个参数设置为"(UID BODY[TEXT])"将返回电子邮件的正文。RFC2060有一个参数列表,在这里应该是有效的。

相关问题 更多 >