Отправка изображений в виде встроенного вложения в HTML Шаблон электронной почты с использованием Django - PullRequest
1 голос
/ 19 января 2020

Я пытаюсь отправить HTML электронное письмо, в котором будет встроенное изображение. Мой код в views.py выглядит следующим образом:

import ...

def signup_mail_function(form):      # here, form is just my context 
    subject = "Signup Successful"
    html_message = render_to_string('emailTemplate.html', {'form': form})
    plain_message = strip_tags(html_message)
    from_email = 'uconnect786@gmail.com'
    to_email = [form.email]

    # Sending email here
    msg = EmailMultiAlternatives(subject=subject, body=plain_message, from_email=from_email,to=to_email)                               
    msg.attach_alternative(html_message, "text/html")
    msg.content_subtype = 'html'
    msg.mixed_subtype = 'related'

    img_path = settings.STATIC_DIR + '/images/blogsImage.svg'  # path of my image
    image_name = Path(img_path).name      # Testing image name,which returns out to be same as image    name i.e blogsImage.svg
    print(img_path, image_name)                              # testing image paths here
    with open(img_path, 'rb') as f:
        image = MIMEImage(f.read(), _subtype="svg+xml")
        msg.attach(image)
        image.add_header('Content-ID', "<{}>".format(image_name))    # Setting content ID
        print("<{}>".format(image_name))                       # Testing content ID

    msg.send()

Итак, выше приведен мой код обработки сообщений электронной почты. В шаблоне я делаю следующее:

<img  alt="Blog Image"  src="cid:blogsImage.svg" />

Электронная почта успешно отправляется с изображением в качестве вложения, но на самом деле я ожидал получить изображение как встроенное изображение на странице Html.

В полученном мною электронном письме вы видите, что в шаблоне Html не отображаются изображения, поэтому всплывают 'alt' теги этих изображений

enter image description here

Я мог сделать снимок всей страницы Html, но под ней у меня есть это изображение в виде вложения.

Попытка:

Я также пытался проверить вставку изображения в моем шаблоне Html с использованием прямых URL, таких как:

<img src="https://www.google.com/url?sa=i&rct=j&q=&esrc=s&source=.........." alt="Image">

Но это тоже не сработало. Я почти прочитал каждую статью и блог о рендеринге встроенных изображений с помощью Django, вопросов и ответов о переполнении стека, но ни один из них не помог мне, хотя я пишу так же. Пожалуйста, кто-нибудь направит меня сюда в правильном направлении!

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Я нашел ответ на свой вопрос ...! Проблема была не в коде, как я ожидал, но в изображении я пытался отправить изображение SVG в своем почтовом сообщении, которое не поддерживается многими почтовыми клиентами, даже Gmail, так что это была проблема. Код отлично работает с другими форматами. Вы можете получить больше информации о поддерживаемых форматах электронной почты здесь:

Как я могу встроить SVG в HTML в электронное письмо, чтобы оно было видно в большинстве / всех браузерах электронной почты?

0 голосов
/ 28 января 2020

сначала вы должны импортировать следующий код в view.py

из email.mime.image import MIMEImage import os

def signup_mail_function(form):
msg = EmailMultiAlternatives(subject=subject, body=plain_message, 
from_email=from_email,to=to_email)
msg.content_subtype = 'html'
msg.mixed_subtype = 'related'
img_path = os.path.join(settings.BASE_DIR, '/images/blogsImage.svg')
with open(banner_path, 'rb') as banner_image:
    banner_image = MIMEImage(img_path.read())
    banner_image.add_header('Content-ID', '<blogsImage.svg>')
    msg.attach(banner_image)
msg.send()

и в html шаблонов

<img  alt="Blog Image"  src="cid:blogsImage.svg" />
...