使用python提取第一行电子邮件正文

时间:2015-09-16 20:41:31

标签: python email gmail imap

我可以使用python(imap和邮件模块)打开电子邮件,主要遵循以下建议:How can I get an email message's text content using 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

这就是我目前要打印的内容,任何想法如何将其限制在电子邮件的第一行?

2 个答案:

答案 0 :(得分:2)

字符串库中有一个完全符合此操作的方法 - splitlines(),它处理不同的行结尾(\ n或\ r \ n)。 From the doc

  

例如,'ab c \ n \ nde fg \ rkl \ r \ n'.splitlines()返回['ab c','','de 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 :(得分: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]