proyectos examples ejemplos bootstrap django email django-email django-mailer

examples - Crear plantillas de correo electrónico con Django



ejemplos de proyectos en django (8)

¡Niños y niñas!

Desde el 1.7 de Django en el método html_message , se agregó el parámetro html_message .

html_message: si se proporciona html_message, el correo electrónico resultante será un correo electrónico multiparte / alternativo con un mensaje como texto / tipo de contenido simple y html_message como el tipo de contenido text / html.

Entonces puedes simplemente:

from django.core.mail import send_mail from django.template.loader import render_to_string msg_plain = render_to_string(''templates/email.txt'', {''some_params'': some_params}) msg_html = render_to_string(''templates/email.html'', {''some_params'': some_params}) send_mail( ''email title'', msg_plain, ''[email protected]'', [''[email protected]''], html_message=msg_html, )

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 puedo encontrar nada sobre 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?


Desde los documentos , para enviar un correo electrónico HTML, quiere usar tipos de contenido alternativos, como este:

from django.core.mail import EmailMultiAlternatives subject, from_email, to = ''hello'', ''[email protected]'', ''[email protected]'' text_content = ''This is an important message.'' html_content = ''<p>This is an <strong>important</strong> message.</p>'' msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) msg.attach_alternative(html_content, "text/html") msg.send()

Probablemente querrás dos plantillas para tu correo electrónico, una de texto simple que se ve más o menos así, almacenada en tu directorio de plantillas debajo de email.txt :

Hello {{ username }} - your account is activated.

y uno HTMLy, almacenado bajo email.html :

Hello <strong>{{ username }}</strong> - your account is activated.

A continuación, puede enviar un correo electrónico utilizando ambas plantillas haciendo uso de get_template , como este:

from django.core.mail import EmailMultiAlternatives from django.template.loader import get_template from django.template import Context plaintext = get_template(''email.txt'') htmly = get_template(''email.html'') d = Context({ ''username'': username }) subject, from_email, to = ''hello'', ''[email protected]'', ''[email protected]'' text_content = plaintext.render(d) html_content = htmly.render(d) msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) msg.attach_alternative(html_content, "text/html") msg.send()


Escribí un snippet que le permite enviar correos electrónicos procesados ​​con plantillas almacenadas en la base de datos. Un ejemplo:

EmailTemplate.send(''expense_notification_to_admin'', { # context object that email template will be rendered with ''expense'': expense_request, })


Hay un error en el ejemplo ... si lo usa como está escrito, se produce el siguiente error:

<type ''exceptions.Exception''>: el objeto ''dict'' no tiene atributo ''render_context''

Deberá agregar la siguiente importación:

from django.template import Context

y cambia el diccionario para ser:

d = Context({ ''username'': username })

Ver http://docs.djangoproject.com/en/1.2/ref/templates/api/#rendering-a-context


He hecho django-templated-email en un esfuerzo por resolver este problema, inspirado por esta solución (y la necesidad de, en algún momento, pasar de usar plantillas de django a usar un conjunto de plantillas mailchimp, etc. para correos electrónicos transaccionales y con plantillas para mi propio proyecto). Sin embargo, todavía es un trabajo en progreso, pero para el ejemplo anterior, lo haría:

from templated_email import send_templated_mail send_templated_mail( ''email'', ''[email protected]'', [''[email protected]''], { ''username'':username } )

Con la adición de lo siguiente a settings.py (para completar el ejemplo):

TEMPLATED_EMAIL_DJANGO_SUBJECTS = {''email'':''hello'',}

Esto buscará automáticamente plantillas llamadas ''templated_email / email.txt'' y ''templated_email / email.html'' para las partes plain y html respectivamente, en la plantilla django normal dirs / loaders (quejándose si no puede encontrar al menos una de ellas) .



Use EmailMultiAlternatives y render_to_string para hacer uso de dos plantillas alternativas (una en texto sin formato y otra en html):

from django.core.mail import EmailMultiAlternatives from django.template import Context from django.template.loader import render_to_string c = Context({''username'': username}) text_content = render_to_string(''mail/email.txt'', c) html_content = render_to_string(''mail/email.html'', c) email = EmailMultiAlternatives(''Subject'', text_content) email.attach_alternative(html_content, "text/html") email.to = [''[email protected]''] email.send()


Django Mail Templated es una aplicación Django rica en características para enviar correos electrónicos con el sistema de plantillas de Django.

Instalación:

pip install django-mail-templated

Configuración:

INSTALLED_APPS = ( ... ''mail_templated'' )

Modelo:

{% block subject %} Hello {{ user.name }} {% endblock %} {% block body %} {{ user.name }}, this is the plain text part. {% endblock %}

Pitón:

from mail_templated import send_mail send_mail(''email/hello.tpl'', {''user'': user}, from_email, [user.email])

Más información: https://github.com/artemrizhov/django-mail-templated