Создайте документ с помощью python-docx и отправьте в виде вложения через django - PullRequest
0 голосов
/ 03 декабря 2018

Я создал документ с использованием docx и попытался отправить его как вложение электронной почты, не сохраняя документ на сервере.Ниже приведен мой код:

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()

Я получаю следующую ошибку:

TypeError: ожидаемый байтовоподобный объект, а не BytesIO

onстрока email.send()

Я попытался преобразовать BytesIO в StringIO, как указано здесь

f = f.read()
f = StringIO(f.decode('UTF-8'))

, а затем я получаю ошибку:

TypeError: ожидаемый байтовоподобный объект, а не StringIO

Я смотрел на решение из this , но не понял, как document отправляется как вложение.

Любая помощь или указатели приветствуются.

Спасибо!

1 Ответ

0 голосов
/ 04 декабря 2018

Ответ был в сообщении об ошибке.

Вместо

file_list.append(["Test.docx",f, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"]

Я сделал

file_list.append(["Test.docx", f.getValue(), "application/vnd.openxmlformats-officedocument.wordprocessingml.document"]

Потому что в моем коде f это BytesIO object и f.getValue() возвращают содержимое объекта как bytes.

Документация: https://docs.python.org/3/library/io.html#io.BytesIO.getvalue

...