Quiero enviar correos electrónicos HTML, usando plantillas de Django como esta:
<html>
<body>
hello <strong>{{username}}</strong>
your account activated.
<img src="mysite.com/logo.gif" />
</body>
No encuentro nada send_mail
y django-mailer solo envía plantillas HTML, sin datos dinámicos.
¿Cómo uso el motor de plantillas de Django para generar correos electrónicos?
django
email
django-email
django-mailer
Anakin
fuente
fuente
1.7
ofertas de Djangohtml_message
ensend_email
stackoverflow.com/a/28476681/953553Respuestas:
Desde los documentos , para enviar un correo electrónico HTML, desea utilizar tipos de contenido alternativos, como este:
Probablemente desee dos plantillas para su correo electrónico: una de texto sin formato que se vea así, almacenada en su directorio de plantillas en
email.txt
:y uno HTMLy, almacenado en
email.html
:Luego, puede enviar un correo electrónico utilizando ambas plantillas haciendo uso de
get_template
esta manera:fuente
plaintext
yhtmly
, y simplemente establecer plantillas y contextos cuando definetext_content
yhtml_content
.¡Niños y niñas!
Desde la versión 1.7 de Django en el método send_email ,
html_message
se agregó el parámetro.Entonces puedes simplemente:
fuente
render_to_string
pista, muy útil.send_mail
no es posible establecer un encabezado personalizado como, por ejemplo,Return-Path
que se puede configurar con elEmailMultiAlternatives's constructor header parameter
He creado django-templated-email en un esfuerzo por resolver este problema, inspirado en esta solución (y la necesidad de, en algún momento, cambiar de usar plantillas de django a usar un conjunto de plantillas de mailchimp, etc. para correos electrónicos transaccionales con plantilla para mi propio proyecto) Sin embargo, todavía es un trabajo en progreso, pero para el ejemplo anterior, haría lo siguiente:
Con la adición de lo siguiente a settings.py (para completar el ejemplo):
Esto buscará automáticamente plantillas denominadas 'templated_email / email.txt' y 'templated_email / email.html' para las partes simple y html respectivamente, en los directorios / cargadores de plantillas normales de django (quejándose si no puede encontrar al menos uno de esos) .
fuente
django.shortcuts.send_templated_mail
: code.djangoproject.com/ticket/17193Use EmailMultiAlternatives y render_to_string para utilizar dos plantillas alternativas (una en texto plano y otra en html):
fuente
He creado Django Simple Mail tener una forma sencilla, personalizable y plantilla reutilizable para cada correo electrónico transaccional que desea enviar.
El contenido y las plantillas de los correos electrónicos se pueden editar directamente desde el administrador de django.
Con su ejemplo, registraría su correo electrónico:
Y envíalo de esta manera:
Me encantaría recibir cualquier comentario.
fuente
Hay un error en el ejemplo ... si lo usa como está escrito, se produce el siguiente error:
Deberá agregar la siguiente importación:
y cambia el diccionario para que sea:
Ver http://docs.djangoproject.com/en/1.2/ref/templates/api/#rendering-a-context
fuente
Django Mail Templated es una aplicación Django rica en funciones para enviar correos electrónicos con el sistema de plantillas Django.
Instalación:
Configuración:
Modelo:
Pitón:
Más información: https://github.com/artemrizhov/django-mail-templated
fuente
Sé que esta es una pregunta antigua, pero también sé que algunas personas son como yo y siempre están buscando respuestas actualizadas , ya que las respuestas antiguas a veces pueden tener información obsoleta si no se actualizan.
Ahora es enero de 2020, y estoy usando Django 2.2.6 y Python 3.7
Nota: utilizo DJANGO REST FRAMEWORK , el código a continuación para enviar correos electrónicos estaba en una vista de modelo en mi
views.py
Entonces, después de leer varias respuestas agradables, esto es lo que hice.
¡Importante! Entonces, ¿cómo
render_to_string
llegareceipt_email.txt
yreceipt_email.html
? En misettings.py
, tengoTEMPLATES
y debajo es cómo se vePresta atención a
DIRS
esta líneaos.path.join(BASE_DIR, 'templates', 'email_templates')
. Esta línea es lo que hace que mis plantillas sean accesibles. En mi project_dir, tengo una carpeta llamadatemplates
, y un subdirectorio llamadoemail_templates
asíproject_dir->templates->email_templates
. Mis plantillasreceipt_email.txt
yreceipt_email.html
están debajo delemail_templates
subdirectorio.Permítanme agregar eso, mi
recept_email.txt
aspecto es así;Y mi
receipt_email.html
aspecto es así;fuente
Escribí un fragmento que le permite enviar correos electrónicos procesados con plantillas almacenadas en la base de datos. Un ejemplo:
fuente
Si desea plantillas de correo electrónico dinámicas para su correo, guarde el contenido del correo electrónico en las tablas de su base de datos. Esto es lo que guardé como código HTML en la base de datos =
En sus puntos de vista:
Esto enviará a la plantilla HTML dinámica lo que ha guardado en Db.
fuente
send_emai()
no funcionó para mí, así que lo uséEmailMessage
aquí en django docs .He incluido dos versiones de la respuesta:
Si desea incluir una versión de texto sin formato de su correo electrónico, modifique lo anterior de la siguiente manera:
Mis versiones simples y html se ven así: plain_version.html:
html_version.html
fuente
Me gusta usar esta herramienta para permitir enviar fácilmente correo electrónico HTML y TXT con un procesamiento de contexto sencillo: https://github.com/divio/django-emailit
fuente