Отправка по электронной почте файла 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()
Другие вопросы по тегам