【问题标题】:Save email as .eml file with python使用 python 将电子邮件保存为 .eml 文件
【发布时间】:2022-10-06 15:04:16
【问题描述】:

我正在尝试将使用aiosmtpd 获得的电子邮件消息导出到*.eml 文件,稍后我可以使用任何*.eml 查看器或电子邮件客户端(如Thunderbird 或Mail)打开该文件。

    async def handle_DATA(self, server, session, envelope) -> str:
        msg: EmailMessage = message_from_bytes(envelope.content, policy=policy.SMTPUTF8)

        with open(\"test.eml\", \'wb\') as outfile:
            outfile.write(msg.as_bytes())

我还尝试使用Generatorunixfrom=Falseunixfrom=False 以及相同的东西保存文件。

        with open(\"test.eml\", \'w\') as file:
            emlGenerator = generator.Generator(file)
            emlGenerator.flatten(msg, unixfrom=False)

该文件已正确创建,但并非所有eml 文件都可以被MailThunderbird 正确读取。

从 gmail.com 收到的电子邮件是正确创建的,但从 protonmail.com 收到的电子邮件不是。可以打开从 Protonmail 电子邮件创建的 Eml 文件,但只能看到电子邮件的 from 和 to 参数。我看不到内容,也看不到里面的附件。

我猜它没有 eml 解析器期望看到的格式。

我尝试过不同的策略(如policy.SMTPpolicy.default、...)。

用python创建eml文件的正确方法是什么?

注意:Protonmail 的 EML 文件的内容包含以下 This is an OpenPGP/MIME signed message (RFC 4880 and 3156)。这可能与缺乏对 Protonmail 电子邮件的正确解析有关吗?

  • 您写道邮件或雷鸟无法正确读取 eml 文件。如果您将电子邮件直接发送到 Mail/Thunderbird,而不是通过 aiosmtpd/eml,会发生什么情况?在这种情况下可以正确读取它们吗?

标签: python email eml aiosmtpd


【解决方案1】:

我对电子邮件 API 有同样的问题。虽然它不能总是作为 .eml 文件直接打开,但如果将邮件发送到 SMTP 服务器,它就可以正确打开。我了解电子邮件 API 会生成一个字符串,该字符串表示发送到 SMTP 服务器的数据。该数据将由 SMTP 服务器而非客户端解释。 SMTP 服务器将解释此数据并将其存储起来,就好像发现更方便一样(即,将其存储在数据库中)。

像 Thunderbird 这样的客户端将使用 POP3 或 IMAP 检索消息,但这并不意味着它正在检索发送到 SMTP 服务器的相同消息,因为服务器可能以不同的格式存储它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2019-12-27
    • 2012-01-17
    • 1970-01-01
    • 2020-06-17
    • 2018-04-26
    • 1970-01-01
    相关资源
    最近更新 更多