html_content с вложениями в django-post_office

Обнаружил странную проблему при прикреплении файла в django-post-office (по крайней мере это наблюдается в версии 2.0.8 и ниже): когда посылаешь письмо, состоящее из html-контента с прикреплением любого файла (неважно какого формата), то письмо приходит, но без прикрепленного файла.

Использовались версии пакетов:

django==1.10.7 (и ниже)
django-post-office==2.0.8 (и ниже)

Более подробно поведение django-post-office указанной версии и работу функции mail.send() можно описать так:

  1. Посылаешь письмо с обычным содержанием, используя параметр message, и прикрепляешь файл - работает правильно, т. е. видим и текст письма и вложение.
  2. Посылаешь письмо с содержанием, содержащее html-теги или даже обычный текст без тегов, используя параметр html_message, и прикрепляешь файл - работает не правильно, т. е. приходит письмо с файлом, но без самого содержания.
  3. Посылаешь письмо с содержанием, используя параметр html_message, но без вложения - работает правильно, т. е. видим текст письма, отформатированный в соответствии с html-тегами.

Я нашёл следующее решение этой странной проблемы: использовать оба параметра message и html_message, например:

msg = render_to_string('path/to/template/', {'some_data': 'some_data'})
pdf = render_to_pdf(form.pdf_template, email_data)
attachments = {'Message.pdf': ContentFile(pdf)}
mail.send(user_email, me, subject=subject, message=msg, html_message=msg, attachments=attachments)

Оцените статью

0 из 5 (всего 0 оценок)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/html_content-with-attachments/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/html_content-with-attachments/">https://vivazzi.pro/ru/it/html_content-with-attachments/</a>

Больше: Правила использования сайта

Для тех, кто продаёт через свой профиль в соц. сетях: моя сестра, Анастасия Мальцева запустила свой курс: «Комфортные продажи через контент»

Все знания построены на собственном опыте и имеют хороший результат, поэтому если вы продаёте товары или услуги и хотите повысить эффективность вашего аккаунта или сайта, то курс будет для вас полезен!

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

Комментарии: 2

Denis
Denis

26.01.2019 4:17 #

A short hack is to pass ' ' (a single whitespace) as 'msg' parameter.
Found it here: https://github.com/ui/django-post_office/issues/116

Ответить

Артём Мальцев
Артём Мальцев автор

28.01.2019 11:44 #

Thanks for your solution!

Ответить

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц