【问题标题】:Save an django email to eml将 django 电子邮件保存到 eml
【发布时间】:2013-04-19 08:43:20
【问题描述】:

我正在 django 中生成一堆 html 电子邮件,我想将它们保存到模型中,在 FileField 中。我可以很容易地生成 html 内容并转储到File,但我想创建可以在电子邮件客户端中打开的东西,例如eml 文件。有谁知道 python 或 django 模块可以做到这一点?需要说明的是,我不是在寻找替代电子邮件后端,因为我还希望在生成电子邮件时发送它们。

编辑:经过一番阅读,在我看来 EmailMessage.messge() 应该返回应该存储在 eml 文件中的内容。但是,如果我尝试这样保存,生成的文件是空的:

import tempfile
name = tempfile.mkstemp()[1]
fh = open(name, 'wb')
fh.write(bytes(msg.message()))
fh.close()
output = File(open(name, 'rb'), msg.subject[:50])

我想使用BytesIO 代替临时文件,但临时文件更容易测试。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @SamueleMattiuzzo 我可以尝试什么?我正在寻找一个模块,对语法没有帮助。
  • 也许您需要一份时事通讯? emenica django newsletter
  • @AamirAdnan 并非如此 - 我的电子邮件以及它们周围的一般基础设施不需要任何复杂的东西。生成电子邮件很容易,我只是坚持将其保存到文件中。

标签: python django file email


【解决方案1】:

EML 文件实际上是一个带有名称值对的文本文件。一个有效的 EML 文件就像

From: test@example.com
To: test@example.com
Subject: Test

Hello world!

如果您遵循上述模式并将其保存在扩展名为 .eml 的文件中,则类似 Thunderbird 的电子邮件客户端将毫无问题地解析并显示它们。

【讨论】:

  • 如果您解释如何处理包含替代品的电子邮件(html 电子邮件),将会很有帮助
【解决方案2】:

Django 的EmailMessage.message().as_bytes() 将返回 .eml 文件的内容。然后你只需要将文件保存到你选择的目录:

from django.core.mail import EmailMessage

msg = EmailMessage(
    'Hello',
    'Body goes here',
    'from@example.com',
    ['to3@example.com'],
)
eml_content = msg.message().as_bytes()
file_name = "/path/to/eml_output.eml"
with open(file_name, "wb") as outfile:
    outfile.write(eml_content)

【讨论】:

    【解决方案3】:

    我遇到了类似的问题。我在 Django 网站上找到了ticket。最后comment 建议使用django-eml-email-backend。它对我有帮助,而且非常有用且简单。

    Example:

    安装:

    $ pip install django-eml-email-backend
    

    使用:

    EMAIL_BACKEND = 'eml_email_backend.EmailBackend'
    EMAIL_FILE_PATH = 'path/to/output/folder/'
    

    【讨论】:

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