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

Extract first line of email body using python

我可以使用 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

这是我目前必须打印正文的内容,有什么想法可以将其限制在电子邮件的第一行吗?

根据文档 get_payload() 应该 return 一个字符串,所以这应该有效。

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]

字符串库中有一个方法专门用于此操作 - splitlines(),它负责处理不同的行结尾(\n 或 \r\n)。 From the doc:

For example, 'ab c\n\nde fg\rkl\r\n'.splitlines() returns ['ab c', '', 'de fg', 'kl'],

因为它 return 是一个数组,所以获取第一个元素是微不足道的 - [0]。如果最后一个元素以换行符结尾,它也不会 return 额外的空字符串,这与 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

顺便说一句,文本附件也是 'text/plain' 内容类型,可能会打乱您预期的数据;你可能想跳过那些 - see my post here(自引,xaxax)。

HTH