2011-09-22 95 views
0

拉回來純文本正文我一直在這一點,我缺少的標誌。Python從消息從IMAP帳戶

我能夠連接,並通過imaplib去取郵件。

msrv = imaplib.IMAP4(server) 
msrv.login(username,password) 

# Get mail 

msrv.select() 

#msrv.search(None, 'ALL') 

typ, data = msrv.search(None, 'ALL') 

# iterate through messages 
for num in data[0].split(): 
    typ, msg_itm = msrv.fetch(num, '(RFC822)') 
    print msg_itm 
    print num 

但我需要做的就是這條消息是純文本的身體,我認爲,隨着電子郵件分析器的作品,但我有得到它的工作的問題。

有沒有人有一個完整的例子我可以看看?

謝謝,

回答

1

下面是從docs最小例如:

import getpass, imaplib 

M = imaplib.IMAP4() 
M.login(getpass.getuser(), getpass.getpass()) 
M.select() 
typ, data = M.search(None, 'ALL') 
for num in data[0].split(): 
    typ, data = M.fetch(num, '(RFC822)') 
    print 'Message %s\n%s\n' % (num, data[0][1]) 
M.close() 
M.logout() 

在這種情況下,數據[0] [1]包含消息體。

+1

感謝。它給了我信息。有沒有辦法讓身體而不是附件? – TheMadAdmin

+0

試試這個:進口電子郵件,味精= email.message_from_string(數據[0] [1]) –

8

爲了讓我做這樣的事情電子郵件的正文的純文本版本....

xxx= data[0][1] #puts message from list into string 


xyz=email.message_from_string(xxx)# converts string to instance of message xyz is an email message so multipart and walk work on it. 

#Finds the plain text version of the body of the message. 

if xyz.get_content_maintype() == 'multipart': #If message is multi part we only want the text version of the body, this walks the message and gets the body. 
    for part in xyz.walk():  
     if part.get_content_type() == "text/plain": 
      body = part.get_payload(decode=True) 
     else: 
        continue 
+0

+1散步()..幫助了我很多! – Spaceghost

+1

,如果它不是'multipart'? – eLRuLL