I have created a document using docx and tried to send as an email attachment without saving the document on the server. Below is my code:
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()
I am getting the following error:
TypeError: expected bytes-like object, not BytesIO
on the line email.send()
I tried converting BytesIO to StringIO as mentioned here
f = f.read()
f = StringIO(f.decode('UTF-8'))
and then I get the error:
TypeError: expected bytes-like object, not StringIO
I looked at the solution from this, but didn't understand how the document
is sent as an attachment.
Any help or pointers is appreciated.
Thanks!
Top comments (2)
I'm not familiar with the library BUT:
BytesIO is basically a buffer of bytes in memory, somewhere your library wants bytes, not the buffer itself, hence the:
In the
file_list
you're doing this:where f is the BytesIO. What you need is the value contained in it:
you can see the documentation for that method here: docs.python.org/3/library/io.html#...
BTW you should probably tag this post as #help because... you're asking for help :D
Thank you, your suggestion worked for me. I added the tag too :)