Как отправить HTML-сообщения со встроенными изображениями? Как HTML должен ссылаться на изображения? Изображения должны быть добавлены в виде прикрепленного письма MultiPart?
Любой пример очень оценен.
Как отправить HTML-сообщения со встроенными изображениями? Как HTML должен ссылаться на изображения? Изображения должны быть добавлены в виде прикрепленного письма MultiPart?
Любой пример очень оценен.
http://djangosnippets.org/snippets/285/
Вы должны использовать MultiPart и cid:. Почти всегда плохая идея отправлять html-письма с изображениями. Он дает спам-точки на ваш почтовый сервер и smtp-сервер...
Помните, что 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">'
Я добился того, что 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