python - 电子邮件正文有时是一个字符串,有时是一个列表。为什么?

标签 python email message payload

我的应用程序是用 python 编写的。我正在做的是在 postfix 收到的每封电子邮件上运行一个脚本,并对电子邮件内容做一些事情。 Procmail 负责运行将电子邮件作为输入的脚本。当我将输入消息(可能是文本)转换为 email_message 对象(因为后者派上用场)时,问题就开始了。我正在使用 email.message_from_string(其中 email 是默认的电子邮件模块,带有 python)。

导入电子邮件 消息 = email.message_from_string(original_mail_content) message_body = message.get_payload()

此 message_body 有时会返回一个列表 [email.message.Message 实例,email.message.Message 实例],有时会返回一个字符串(传入电子邮件的实际正文内容)。为什么。甚至我还发现了一个观察结果。当我浏览 email.message.Message.get_payload() 文档字符串时,我发现了这个..
""" 有效载荷将是一个列表对象或一个字符串。如果你改变 列表对象,您就地修改消息的有效负载....."""

那么我如何使用通用方法通过 python 获取电子邮件正文?请帮帮我。

最佳答案

好吧,答案是正确的,你应该阅读文档,但是对于通用方法的示例:

def get_first_text_part(msg):
    maintype = msg.get_content_maintype()
    if maintype == 'multipart':
        for part in msg.get_payload():
            if part.get_content_maintype() == 'text':
                return part.get_payload()
    elif maintype == 'text':
        return msg.get_payload()

这很容易造成一些灾难,因为可以想象这些部分本身可能有多个部分,而且它实际上只返回第一个文本部分,所以这也可能是错误的,但你可以玩一下。

关于python - 电子邮件正文有时是一个字符串,有时是一个列表。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/594545/

相关文章:

email - 使电子邮件地址免受网页上机器人的攻击?

r - 将 R 诊断消息发送到 stdout 而不是 stderr

python - MySQL #1054 UPDATE 查询错误代码

python - Django Compressor、S3 和 SASS,编译文件未上传

node.js - 电子邮件已验证,但我仍然无法使用 Amazon SES 发送电子邮件

validation - 将自定义消息添加到 Zend Framework 2 回调验证器

来自 Process.MainWindowHandle 的 C# HwndSource

python - 获取文本文件的第一行和最后一行的最有效方法是什么?

python - Pdb 在异常中转到异常中的帧

bash - 这里文档给出 'unexpected end of file' 错误