将django电子邮件保存到eml

时间:2013-04-19 08:43:20

标签: python django file email

我在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而不是临时文件,但临时文件更容易进行测试。

3 个答案:

答案 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。它对我有帮助,它非常有用且简单。

Example

安装:

$ pip install django-eml-email-backend

使用:

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