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

Posted

技术标签:

【中文标题】使用python提取电子邮件正文的第一行【英文标题】:Extract first line of email body using python 【发布时间】:2015-12-13 14:42:38 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

字符串库中有一个专门用于此操作的方法 - 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

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

HTH

【讨论】:

【参考方案2】:

根据文档 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]

【讨论】:

以上是关于使用python提取电子邮件正文的第一行的主要内容,如果未能解决你的问题,请参考以下文章

Python 正则表达式不适用于 Gmail 正文

如何使用 Gmail API (python) 检索整个邮件正文

使用 Python 根据磁盘使用情况在 HTML 表格电子邮件正文中添加标题和文本颜色

Python如何一行代码自动发邮件

VBA 展望。尝试从电子邮件正文中提取特定数据并导出到 Excel

Google Apps 脚本 - 将 gmail 中的数据提取到电子表格中