Динамично генерируйте PDF и пошлите его по электронной почте с помощью django

У меня есть django приложение, которое динамично генерирует PDF (использующий reportlab + pypdf) от ввода данных пользователем на HTML-форме и возвращает ответ HTTP с application/pdf MIMEType.

Я хочу иметь опцию между выполнением вышеупомянутого или пользованием электронной почтой сгенерированного PDF, но я не могу выяснить, как использовать класс EmailMessage attach(filename=None, content=None, mimetype=None) метод. Документация не дает большую часть описания какого вида из объекта content как предполагается. Я попробовал объект файла и вышеупомянутое application/pdf Ответ HTTP.

У меня в настоящее время есть обходное решение, где мое представление сохраняет PDF на диск, и затем я присоединяю получающийся файл к исходящей почте с помощью attach_file() метод. Это кажется неправильным мне, и я вполне уверен существует лучший путь.

8
задан Shane 7 May 2010 в 15:24
поделиться

2 ответа

На основе примера в вашей ссылке :

message.attach('design.png', img_data, 'image/png')

Разве ваш контент для PDF не будет таким же, как и вы в pdf файл нормально писать? Вместо сохранения created_pdf_data в myfile.pdf вставьте его в поле содержимого message.attach:

message.attach('myfile.pdf', generated_pdf_data, 'application/pdf')
0
ответ дан 5 December 2019 в 17:35
поделиться

Хорошо, я понял это.

Второй аргумент в attach() ожидает строку. Я просто использовал метод read() файлового объекта для генерации того, что он искал:

from django.core.mail import EmailMessage

message = EmailMessage('Hello', 'Body goes here', 'from@example.com',
    ['to1@example.com', 'to2@example.com'], ['bcc@example.com'],
    headers = {'Reply-To': 'another@example.com'})
attachment = open('myfile.pdf', 'rb')
message.attach('myfile.pdf',attachment.read(),'application/pdf')

Вместо этого я использовал tempfile, но концепция такая же, как и обычный файловый объект.

6
ответ дан 5 December 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: