我在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
而不是临时文件,但临时文件更容易进行测试。
答案 0 :(得分:0)
EML文件实际上是一个具有名称值对的文本文件。有效的EML文件就像
From: test@example.com
To: test@example.com
Subject: Test
Hello world!
如果您按照上述模式将其保存在扩展名为.eml的文件中,那么像电子邮件客户端这样的thunderbird会解析并显示它们没有任何问题。
答案 1 :(得分:0)
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)
答案 2 :(得分:0)
我有类似的问题。我在Django网站上发现了ticket。最后comment建议使用django-eml-email-backend。它对我有帮助,它非常有用且简单。
安装:
$ pip install django-eml-email-backend
使用:
EMAIL_BACKEND = 'eml_email_backend.EmailBackend'
EMAIL_FILE_PATH = 'path/to/output/folder/'