2015-09-16 21 views
0

我可以使用python(IMAP和邮件模块)打开邮件,主要是以下建议位置:How can I get an email message's text content using python?提取电子邮件的主体的第一线使用python

但我需要打印只有每电子邮件的主体的第一线 - 如何我可以这样做吗?

for part in email_message.walk(): 
    # each part is a either non-multipart, or another multipart message 
    # that contains further parts... Message is organized like a tree 
    if part.get_content_type() == 'text/plain': 
     print part.get_payload() # prints the raw text 

这是我目前必须打印的身体,任何想法如何限制到电子邮件的第一行?

回答

1

有一个在字符串库准确进行此操作的方法 - splitlines(),这需要不同的行结尾(\ n或\ r \ n)的照顾。 From the doc

例如, 'ABÇ\ n \ NDE FG \ RKL \ r \ n'.splitlines()返回[' AB C”, '', '去FG', 'KL'],

因为它返回一个数组,所以获取第一个元素很简单 - [0]。如果最后一个元素以换行符结尾,它也不会返回一个额外的空字符串,与split('n')不同。

另外,你最好使用get_payload(decode=True),它会照顾base64等你解码。最后,这里是你的榜样更新:

for part in email_message.walk(): 
# each part is a either non-multipart, or another multipart message 
# that contains further parts... Message is organized like a tree 
if part.get_content_type() == 'text/plain': 
    # you may want to break it out in 2 statements for readability 
    print part.get_payload(decode=True).splitlines()[0] # prints the first line 

BTW,文本附件也都是“text/plain的”内容类型和可能弄乱你预期的数据;你可能想跳过那些 - see my post here(自引,xaxax)。

HTH

1

根据文档get_payload()应该返回一个字符串,所以这应该工作。

for part in email_message.walk(): 
    # each part is a either non-multipart, or another multipart message 
    # that contains further parts... Message is organized like a tree 
    if part.get_content_type() == 'text/plain': 
     lines=part.get_payload().split("\n") 
     print lines[0] 
相关问题