Отправка по электронной почте файла PDF Django без сохранения в FileField
Я изо всех сил пытался отправить по электронной почте файл PDF, который генерирую (используя простую печать), я хотел бы иметь возможность отправить электронное письмо напрямую, не сохраняя файл в моем объекте модели (если бы я мог просто сохранить его во временном местоположении и отправить его по электронной почте). Но продолжайте получать эту ошибку.'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')
1 ответ
Я смог создать файл PDF на лету, сохранить его во временном местоположении и отправить его по электронной почте. Я перестал использовать SimpleUploadedFile
и использовал NamedTemporaryFile
функция от tempfile
Python module.it позволяет вам возвращать файлоподобный объект, который можно использовать как временную область хранения, в которую вы можете что-то записать, прочитав его. вот ссылка на документы и некоторые ссылки на блог на временном файле
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()