首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django邮局:无法打开电子邮件附件

Django邮局:无法打开电子邮件附件
EN

Stack Overflow用户
提问于 2018-02-13 21:49:56
回答 1查看 284关注 0票数 0

我已经编写了一个django视图,它可以加载许多PDF文件并将它们组合到一个.zipfile中。

我不想将对象保存在服务器上,所以我使用StringIO()

这是通过以下代码完成的:

代码语言:javascript
复制
zip_buffer = StringIO.StringIO()
        summary_filename = 'summary' + str(user) + '.pdf'
        with zipfile.ZipFile(zip_buffer, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
            for file in attachements:

                    zf.write(str(settings.MEDIA_ROOT) + '/' + str(file[0].file),
                             file[1] + '.' + str(file[0].file).split('.')[-1])

            zf.writestr(summary_filename, pdf)

当我调试代码时,我让它通过以下代码在浏览器中以下载的形式返回对象

代码语言:javascript
复制
response = HttpResponse(zip_buffer.getvalue(), 'application/x-zip-compressed')
    return response

当我单击按钮时,浏览器会下载一个包含所有信息的.zip文件。

当我也想通过电子邮件发送文件时,问题就开始了。我正在使用Django post-office

并尝试使用以下命令发送电子邮件:

代码语言:javascript
复制
attachment_file = zip_buffer.getvalue()

send_email([requester.email], email_template
               context, attachments={'summary.pdf': attachment_file})

附件文件与我提供给浏览器的文件完全相同,但这会导致以下异常:

代码语言:javascript
复制
file() argument 1 must be encoded string without NULL bytes, not str

然后我尝试了一些不同的东西:

代码语言:javascript
复制
send_email([requester.email], 'userprofile_summary', requester.profile.tenant,
                   context, attachments={
                'summary.zip': ContentFile(attachment_file)})

现在,这在某种意义上是有效的,即发送带有附件的电子邮件,但我收到的文件是不可打开的。它就像它的损坏,无论是OSX,Windows和Linux电脑都无法打开文件。

我现在不知道该怎么做/问题出在哪里。该文件在浏览器中运行良好,但当我尝试通过电子邮件发送它时,它却崩溃了。当我将其封装到'ContentFile()‘类中时,它返回一个无法打开的文件。

有人知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 23:43:39

我解决了它,这是我的代码中的一个错误。对于有类似问题的未来读者:

我忘了在zf.writestr(summary_filename, pdf)后面添加一个zf.close(),虽然浏览器能够处理这个错误,但Django更小心--导致了我的问题。添加close()命令解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48768366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档