Django прикрепить CSV к электронной почте - PullRequest
0 голосов
/ 12 марта 2019

Я сейчас пытаюсь прикрепить csv к электронному письму, но продолжаю получать ошибки, код, который у меня есть на данный момент, таков:

error_list=[{'error_1': 0, 'error_2':1}, {'error_1': 2, 'error_2': 1}]
with open('errors.csv', "w") as infile:
    writer = csv.DictWriter(infile, fieldnames=error_list[0].keys())
    writer.writeheader()
    for data in error_list:
        writer.writerow(data)
mail = EmailMessage(subject='Test', from_email=EMAIL_HOST_USER, to=['example@example.com',])
mail.attach('errors.csv', infile, 'text/csv')
mail.send()

Я не совсем уверен, где я иду неправильно - в данный момент я получаю сообщение об ошибке: «Соединение неожиданно закрыто: [WinError 10054] Существующее соединение было принудительно закрыто удаленным хостом»

1 Ответ

0 голосов
/ 12 марта 2019

Второй аргумент EmailMessage.attach() должен быть контентом файла в качестве строки байтов (str в python2, byte в python3), а не объектом file (и особенно неодин открывается в режиме записи).

На самом деле, запись в файл здесь не только бесполезна и неэффективна, но и требует проблем с параллелизмом, особенно когда вы используете одно и то же имя файла для всех (помните, что приложение wsgi обычно обслуживаетсяиспользование нескольких процессов для обработки одновременных запросов).Создание файла в текущем рабочем каталоге - еще одна плохая идея FWIW, вы хотите настроить конкретный каталог в известном месте (и за пределами вашей базы кода) для такого рода вещей - но в любом случае: вам не нужен файл здесь (если ваш json не равен огромные (что редко встречается), вы можете вместо этого использовать файл-подобный объект в памяти, такой как StringIO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...