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 EmailMessage
Los 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