I have a django app that dynamically generates a PDF (using reportlab + pypdf) from user input on an HTML form, and returns the HTTP response with an application/pdf
MIMEType.
I want to have the option between doing the above, or emailing the generated pdf, but I cannot figure out how to use the EmailMessage class's attach(filename=None, content=None, mimetype=None)
method. The documentation doesn't give much of a description of what kind of object content
is supposed to be. I've tried a file object and the above application/pdf
HTTP response.
I currently have a workaround where my view saves a pdf to disk, and then I attach the resulting file to an outgoing email using the attach_file()
method. This seems wrong to me, and I'm pretty sure there is a better way.
Ok I've figured it out.
The second argument in attach()
expects a string. I just used a file object's read()
method to generate what it was looking for:
from django.core.mail import EmailMessage
message = EmailMessage('Hello', 'Body goes here', '[email protected]',
['[email protected]', '[email protected]'], ['[email protected]'],
headers = {'Reply-To': '[email protected]'})
attachment = open('myfile.pdf', 'rb')
message.attach('myfile.pdf',attachment.read(),'application/pdf')
I ended up using a tempfile instead, but the concept is the same as an ordinary file object.