使用python-docx创建一个文档,并通过django作为附件发送

时间:2018-12-03 19:14:50

标签: python django email email-attachments python-docx

我已经使用docx创建了一个文档,并尝试将其作为电子邮件附件发送而没有将文档保存在服务器上。下面是我的代码:

Document = document()
paragraph = document.add_paragraph("Test Content")
f = BytesIO()
document.save(f)
file_list = []
file_list.append(["Test.docx",f, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"]
email = EmailMessage(subject = 'Test', body = 'Hi', to = ['test@test.com'], attachments = file_list)
email.send()

我遇到以下错误:

  

TypeError:预期的类似字节的对象,而不是BytesIO

email.send()行上

我曾尝试按照here

将BytesIO转换为StringIO
f = f.read()
f = StringIO(f.decode('UTF-8'))

然后出现错误:

  

TypeError:预期的类似字节的对象,而不是StringIO

我查看了this的解决方案,但不了解如何document作为附件发送。

感谢任何帮助或指示。

谢谢!

1 个答案:

答案 0 :(得分:1)

答案在错误消息中。

代替

file_list.append(["Test.docx",f, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"]

我做到了

file_list.append(["Test.docx", f.getValue(), "application/vnd.openxmlformats-officedocument.wordprocessingml.document"]

因为在我的代码中f是一个BytesIO对象,并且f.getValue()将该对象的内容返回为bytes

文档:https://docs.python.org/3/library/io.html#io.BytesIO.getvalue