Django EmailMultiAl Альтернативы со встроенным изображением в HTML - PullRequest
5 голосов
/ 21 июня 2011

Я пытаюсь отправить электронное письмо с HTML и встроенным изображением.Отправка электронной почты работает нормально, и изображение также прикрепляется к электронной почте, но изображение не отображается в формате HTML (встроенный).Я использовал Content: ID в поле зрения и cid в шаблоне, но безуспешно :(. Я изучаю множество форм и применяю решения, но напрасно, пожалуйста, помогите! Вот мой код:

html_content = render_to_string('newsletters/newsletter_template.html', vars)
text_content = strip_tags(html_content) 

to = 'myemail@gmail.com'


msg = EmailMultiAlternatives(self.subject, text_content, settings.STAFF_FROM_EMAIL, [to])
msg.attach_alternative(html_content, "text/html")

image_file = open('../media/images/banner_admin.gif', 'rb')
msg_image = MIMEImage(image_file.read())
image_file.close()

msg_image.add_header('Content-ID', '<image1>')
msg.attach(msg_image)

msg.send()

Файл шаблона:

<div style="border:2px solid #CCCCCC; width:900px; font-size:10px; padding:5px;">
    <div style="margin-bottom: 10px;"><img src="cid:image1" /></div>
    <div style="">{{body|linebreaks}}</div>
</div>

Пожалуйста, дайте мне знать, если я что-то упустил здесь ...

Ответы [ 2 ]

0 голосов
/ 16 марта 2018

Чтобы встроить PNG-файл в тело письма, попробуйте этот код:

for f in ['img1.png', 'img2.png']:
    fp = open(os.path.join(os.path.dirname(__file__), f), 'rb')
    msg_img = MIMEImage(fp.read())
    fp.close()
    msg_img.add_header('Content-ID', '<{}>'.format(f))
    msg.attach(msg_img)`enter code here`

msg.send()

Теперь вы можете использовать <img src="cid:img1.png"> в своем шаблоне. Результатом должно быть то, что почтовый клиент показывает изображение, встроенное в почту, вместо тега <img>, а не как вложение.

0 голосов
/ 21 июня 2011

Изображения в электронных письмах HTML должны иметь абсолютные URL:

<img alt="Django" src="https://www.djangoproject.com/m/img/site/hdr_logo.gif">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...