【问题标题】:IMAP get sender name and body text?IMAP 获取发件人姓名和正文?
【发布时间】:2013-11-01 15:23:07
【问题描述】:

我正在使用此代码:

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 和正文文本?

【问题讨论】:

    标签: python email imap


    【解决方案1】:

    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 有一个在这里应该有效的参数列表。

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • 非常感谢! imaplib 和 Python 的 email 包的 API 快把我逼疯了,这真是太棒了!
      • @xjcl,享受 =D
      • 如果您要宣传自己的代码,则需要明确说明。请参阅我们的promotion policy.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2016-05-07
      • 2011-11-11
      相关资源
      最近更新 更多