2013-10-23 63 views
4

我使用這個代碼: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返回一堆額外的信息,我怎麼能,分析,每說,額外的信息,得到的只是發件人和正文文本?

回答

12

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

只想請求(和返回)的線從服務器的電子郵件。同樣將第二個參數設置爲"(UID BODY[TEXT])"將返回電子郵件的正文。 RFC2060有一個在這裏應該有效的參數列表。

相關問題