2013-02-08 28 views
1
import sys, imaplib 
    from email.parser import HeaderParser 

mail = imaplib.IMAP4_SSL(SERVER, PORT) 
status, data = mail.search(None, 'ALL') 

for msg_id in data[0].split(): 
    status, message = mail.fetch(msg_id, '(RFC822)') 
    print message[0][1] 

mail.close() 
mail.logout() 

我试图通过imap从Gmail中获取电子邮件。一切正常,但我无法从消息中提取标题(主题,发件人,日期)。在上面的代码中,消息[0] [1]包含我的电子邮件。python email.parser:从电子邮件中提取标题

我能得到头的唯一方法是再次询问IMAP服务器,专为头:

status, message = mail.fetch(msg_id, '(BODY[HEADER.FIELDS (SUBJECT FROM)])') 
parser = HeaderParser() 
header = parser.parsestr(message[0][1]) 
print header 

可能有人请指教该怎么办呢?

回答

8

我假设你已经收到了完整的邮件,而不仅仅是邮件正文。

raw_message = """From: Santa Claus <[email protected]> 
To: Some Dude <[email protected]> 
Subject: I have lost your presents. 

Dude, i am so sorry. 
""" 

import email 
msg = email.message_from_string(raw_message) 
print(msg['Subject']) # "I have lost your presents." 

msgemail.message.Message对象。

+0

这正是我所期待的。非常感谢 – user1968963 2013-02-08 13:50:44

+0

有史以来最酷的答案;) – Chris 2013-02-08 13:58:42