2016-11-13 109 views
0

我有這個代碼(下面),顯示我的電子郵件帳戶中的所有電子郵件。它還顯示整個電子郵件,包括所有的元數據(我不想要)。有沒有辦法只打印收件人,發件人,主題和郵件?這也是在Python中。謝謝。只打印郵件的特定部分

代碼:

import getpass, imaplib 
import os 

email = raw_input('Email: ') 
password = getpass.getpass() 
M = imaplib.IMAP4_SSL("imap.gmail.com", 993) 
print('Logging in as ' + email + '...') 
M.login(email, password) 
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

使用正則表達式,例如/To.*$/等等。 –

+0

標準模塊'email.parser' - 請參閱第二個示例:https://docs.python.org/3/library/email-examples.html – furas

+0

@furas我回來的只有'None'。 –

回答

0

對於誰比誰都想知道,這是工作代碼:

from __future__ import print_function 
import imaplib 
import getpass 
import os 
from email.parser import Parser 

email = raw_input('Email: ') 
password = getpass.getpass() 

print('Logging in as', email, '...\n') 

M = imaplib.IMAP4_SSL("imap.gmail.com", 993) 
M.login(email, password) 

M.select() 
typ, data = M.search(None, 'ALL') 

for num in data[0].split(): 
    typ, data = M.fetch(num, '(RFC822)') 
## To view whole email, uncomment next line 
## print ('Message %s\n%s\n' % (num, data[0][1])) 

    header = Parser().parsestr(data[0][1]) 
    print('To:', header['Delivered-To']) 
    print('From:', header['From']) 
    print('Subject:', header['Subject']) 

    print('Body:', header.get_payload(), '\n') 

M.close() 
M.logout() 

希望這有助於:)非常感謝@furas!

+0

請接受[接受答案](http://stackoverflow.com/help/someone-answers),而不是創建自己的答案。接受問題是如何關閉的,以及你和回答者如何獲得聲望。查看[本頁](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)關於如何接受工作的更多細節。 –

+0

@BurhanKhalid我想,但furas提供的代碼不適合我。我發佈的是這樣做的,所以這就是答案。 –

0

您可以使用email.parser.Parser()從標準的模塊來解析郵件,並獲得頭

from __future__ import print_function 
import imaplib 
import getpass 
import os 
from email.parser import Parser 

email = raw_input('Email: ') 
password = getpass.getpass() 

print('Logging in as', email, '...') 

M = imaplib.IMAP4_SSL("imap.gmail.com", 993) 
M.login(email, password) 

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

    header = Parser().parsestr(data[0][1]) 
    print('From:', header['From']) 
    print('To:', header['To']) 
    print('Subject:', header['Subject']) 

    print('Body:') 
    for part in header.get_payload(): 
     print(part.as_string()[:150], '.....') 

    #break # to test only first message 

M.close() 
M.logout() 
+0

這幾乎完美的作品。 '身體'不起作用。我回來了: 回溯(最近呼叫最後): print(part.as_string()[:150)文件「C:\ Users \ Ian \ Desktop \ reademail.py」,第62行,在 ],'.....') AttributeError:'str'對象沒有屬性'as_string' –

+0

所以嘗試不使用'as_string()' – furas

+0

好吧,現在它每行打印一個字符的主體'.... '之後。例如:T ..... e ..... s ..... t .....每一個都在一個新的行上。 –