Отправка файлов в виде вложения Django - PullRequest
3 голосов
/ 09 июля 2019

Я создал файл XLS и хочу отправить его в виде вложения в электронное письмо.Следующий код работает нормально, и я получаю электронное письмо с файлом XLS (код состояния 200 OK).

# This is working code
import xlwt
import StringIO
import zipfile

from django.core.mail import EmailMessage


work_book = xlwt.Workbook()

# Here some boring stuff with excel
...

report_name = "do_something_%(username)s_%(current_date)s.xls"

f = StringIO.StringIO()
work_book.save(f)

message = EmailMessage(
    subject=u"Sample Title",
    body=u"Sample body",
    to=["test@company.com"])

message.attach(report_name, f.getvalue())
message.send()

Но если я пытаюсь отправить сжатый файл XLS (используя zipfile), я неполучить что-нибудь (однако код состояния «200 OK»).Я заменил последние 2 строки кода следующим:


report_name_zip = 'do_something_%(username)s_%(current_date)s.zip'

with zipfile.ZipFile(f, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
    zf.writestr(zinfo_or_arcname=report_name, bytes=f.getvalue())

message.attach(report_name_zip, f.getvalue())
message.send()

1 Ответ

2 голосов
/ 09 июля 2019

Вы читаете и пишете оба к stringIO. Вы должны использовать два отдельных StringIO s:

report_name_zip = 'do_something_%(username)s_%(current_date)s.zip'

report_name = "do_something_%(username)s_%(current_date)s.xls"

<b>f1</b> = StringIO.StringIO()
work_book.save(<b>f1</b>)

<b>f2</b> = StringIO.StringIO()
with zipfile.ZipFile(<b>f2</b>, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
    zf.writestr(zinfo_or_arcname=report_name, data=<b>f1</b>.getvalue())

message.attach(report_name_zip, <b>f2</b>.getvalue())
message.send()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...