电子邮件正文?

时间:2011-11-04 05:40:26

标签: python email

大家好我使用的脚本涉及:

import oauth2 as oauth
import oauth2.clients.imap as imaplib
import email
conn = imaplib.IMAP4_SSL('imap.googlemail.com')
conn.debug = 4 

# This is the only thing in the API for impaplib.IMAP4_SSL that has 
# changed. You now authenticate with the URL, consumer, and token.
conn.authenticate(url, consumer, token)

# Once authenticated everything from the impalib.IMAP4_SSL class will 
# work as per usual without any modification to your code.
conn.select('[Gmail]/All Mail')

response, item_ids = conn.search(None, "SINCE", "01-Jan-2011")
item_ids = item_ids[0].split()

# Now iterate through this shit and retrieve all the email while parsing
# and storing into your whatever db.

for emailid in item_ids:
    resp, data = conn.fetch(emailid, "(RFC822)") 
    email_body = data[0][1] 
    mail = email.message_from_string(email_body) 

我目前的问题是我似乎无法检索mail实例的正文。我可以通过打印或mail.as_string()来查看电子邮件的内容,但即使使用mail.keys()和mail.values(),我实际上也无法看到邮件的内容(主要消息)。 / p>

此电子邮件lib API有什么问题? (或者说我做错了什么)?

1 个答案:

答案 0 :(得分:4)

来自email docs

  

您可以将解析器传递给字符串或文件对象,解析器也可以   返回对象结构的根Message实例。

     

对于简单的非MIME消息,此根对象的有效负载将为   可能是包含消息文本的字符串。对于MIME   消息,根对象将从其is_multipart()返回True   方法,子部分可以通过get_payload()和   walk()方法。

因此请使用get_payload()或如果邮件是多部分,请调用walk()方法,然后在所需的子部分上使用get_payload()