1

我一直在努力通过电子邮件发送正在生成的 pdf 文件(使用 weasy print),我希望能够直接发送电子邮件而不将文件保存在我的模型对象中(如果我可以将其保存在临时位置并通过电子邮件发送)。但不断收到此错误。 'file() 参数 1 必须是没有空字节的编码字符串,而不是 str

pdf_file = HTML(string=rendered_html,
                base_url=settings.MEDIA_ROOT).write_pdf()

certificate = SimpleUploadedFile(
    'Certificate-' + '.pdf', pdf_file, content_type='application/pdf')

attachment = certifcate.read()

msg.attach_file(attachment, 'application/pdf')
4

1 回答 1

1

我能够即时生成pdf文件,将其保存到临时位置并通过电子邮件发送。我停止使用SimpleUploadedFile并使用python模块中的NamedTemporaryFile函数。tempfile它允许您返回可用作临时存储的类似文件的对象区域,您可以在其中写入内容,从中读取。这是文档的链接和对 tempfile博客的一些参考

     pdf_file = HTML(string=rendered_html,
                 base_url=settings.MEDIA_ROOT).write_pdf()

     temp = tempfile.NamedTemporaryFile()
     temp.write(pdf_file)
     temp.seek(0)

     msg = EmailMultiAlternatives(
        subject, message, sender, receivers)
     msg.attach_file(temp.name, 'application/pdf')
     msg.send()
于 2017-12-27T11:39:54.650 回答