Подтвердить что ты не робот

Django: как отправлять HTML-сообщения со встроенными изображениями

Как отправить HTML-сообщения со встроенными изображениями? Как HTML должен ссылаться на изображения? Изображения должны быть добавлены в виде прикрепленного письма MultiPart?

Любой пример очень оценен.

4b9b3361

Ответ 1

http://djangosnippets.org/snippets/285/

Вы должны использовать MultiPart и cid:. Почти всегда плохая идея отправлять html-письма с изображениями. Он дает спам-точки на ваш почтовый сервер и smtp-сервер...

Ответ 2

Помните, что django предлагает только обертки для стандартного smtplib - я не знаю, поможет ли это, но попытайтесь посмотреть на этот пример: http://code.activestate.com/recipes/473810-send-an-html-email-with-embedded-image-and-plain-t/

Итак, я думаю, вы могли бы использовать значения заголовка EmailMessage для определения этого "image1" - заголовок сообщения является типом значений, поэтому просто добавьте к нему что-то вроде {'Content-ID': '<image1>'}.

Затем прикрепите файл к своей электронной почте с помощью attach(). После этого вы можете использовать код для генерации html-сообщения следующим образом:

html_content = '<b>Some HTML text</b> and an image: <img src="cid:image1">'

Ответ 3

Я добился того, что op просит использовать почтовую систему django. Усугубляет это, что он будет использовать настройки django для рассылки (включая другую подсистему для тестирования и т.д. Я также использую mailhogs во время разработки). Это также довольно высокий уровень:

from django.conf import settings
from django.core.mail import EmailMultiAlternatives


message = EmailMultiAlternatives(
    subject=subject,
    body=body_text,
    from_email=settings.DEFAULT_FROM_EMAIL,
    to=recipients,
    **kwargs
)
message.mixed_subtype = 'related'
message.attach_alternative(body_html, "text/html")
message.attach(logo_data())

message.send(fail_silently=False)

logo_data - вспомогательная функция, которая прикрепляет логотип (образ, который я хотел бы прикрепить в этом случае):

from email.mime.image import MIMEImage

from django.contrib.staticfiles import finders


@lru_cache()
def logo_data():
    with open(finders.find('emails/logo.png'), 'rb') as f:
        logo_data = f.read()
    logo = MIMEImage(logo_data)
    logo.add_header('Content-ID', '<logo>')
    return logo