2016-11-13 75 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 .....每一个都在一个新的行上。 –