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

新手上路,请多包涵

我正在使用这段代码:

 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 它返回一堆额外信息,我怎么能解析,比如说,额外信息并只获取发件人和正文?

原文由 Sam Tubb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

Python 的 电子邮件 包可能是一个不错的起点。

 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)])")

只会请求(并返回)来自服务器的电子邮件的 发件人 行。同样将第二个参数设置为 "(UID BODY[TEXT])" 将返回电子邮件的正文。 RFC2060 有一个应该在此处有效的参数列表。

原文由 1133261 发布,翻译遵循 CC BY-SA 3.0 许可协议

IMAP 高级库: https ://github.com/ikvk/imap_tools(我是作者)

 from imap_tools import MailBox, A
with MailBox('imap.mail.com').login('test@mail.com', 'password', 'INBOX') as mailbox:
    for msg in mailbox.fetch(A(all=True)):
        sender = msg.from_
        body = msg.text or msg.html

原文由 Vladimir 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题