1

我在 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])

我想使用 aBytesIO而不是临时文件,但临时文件更容易测试。

4

3 回答 3

0

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

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

Hello world!

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

于 2013-04-19T11:24:04.760 回答
0

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

示例

安装:

$ pip install django-eml-email-backend

使用:

EMAIL_BACKEND = 'eml_email_backend.EmailBackend'
EMAIL_FILE_PATH = 'path/to/output/folder/'
于 2019-06-20T07:45:54.670 回答
0

DjangoEmailMessage.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)
于 2018-09-20T19:51:14.527 回答