Saltar al contenido

Django: Cómo enviar correos electrónicos HTML con imágenes incrustadas

Solución:

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

Tienes que usar MultiPart y cid :. Casi siempre es una mala idea enviar correos html con imágenes. Le da puntos de spam a su correo y servidor smtp …

Aquí hay un mejor ejemplo: https://djangosnippets.org/snippets/3001/

Recuerda que django solo ofrece envoltorios para smtplib estándar: no sé si ayudará, pero intente ver este ejemplo: http://code.activestate.com/recipes/473810-send-an-html-email-with-embedded-image- y-llano-t /

Así que supongo que podrías usar EmailMessageLos valores del encabezado para definir esta ‘imagen1’: el encabezado del mensaje es un diccionario de valores, así que solo agregue algo como {'Content-ID': '<image1>'} lo.

Luego adjunte el archivo a su correo electrónico usando attach(). Después de eso, puede usar el código para generar el mensaje html como este:

html_content="<b>Some HTML text</b> and an image: <img src="https://foroayuda.es/cid:image1">"

Logré lo que op está pidiendo usando el sistema de correo de django. Lo mejor es que usará la configuración de django para el envío de correos (incluido un subsistema diferente para las pruebas, etc. También uso mailhogs durante el desarrollo). También es un nivel un poco más alto:

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 es una función auxiliar que adjunta el logo (la imagen que quería adjuntar en este caso):

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *