2010-06-09 16 views
12

¿Alguien puede ayudarme a enviar correo electrónico html con contenido dinámico? Una forma es copiar todo el código html en una variable y llenar el código dinámico dentro de él en las vistas de Django, pero eso no parece ser una buena idea, ya que es un archivo html muy grande.¿Cómo enviar un correo electrónico html con django con contenido dinámico en él?

Agradecería cualquier sugerencia.

Gracias.

+2

¿Por qué no utilizar una plantilla, como con cualquier otra pieza de representación HTML en Django? –

+0

Estoy usando una plantilla y también he procesado las variables correctamente, pero la pregunta es ¿cómo enviar esa plantilla representada como un correo electrónico? –

+2

use render_to_string – KillianDS

Respuesta

8

Esto debería hacer lo que quiera:

from django.core.mail import EmailMessage 
from django.template import Context 
from django.template.loader import get_template 


template = get_template('myapp/email.html') 
context = Context({'user': user, 'other_info': info}) 
content = template.render(context) 
if not user.email: 
    raise BadHeaderError('No email address given for {0}'.format(user)) 
msg = EmailMessage(subject, content, from, to=[user.email,]) 
msg.send() 

Véase el django mail docs por más.

+4

O como ya he dicho, para las primeras 3 líneas, use el atajo render_to_string, existe por algún motivo. – KillianDS

+0

Gracias, lo usaré en mi proyecto y (si recuerdo) edito mi respuesta una vez que la haya probado. – blokeley

32

Ejemplo:

from django.core.mail import EmailMultiAlternatives 
from django.template.loader import render_to_string 
from django.utils.html import strip_tags 

subject, from_email, to = 'Subject', '[email protected]', '[email protected]' 

html_content = render_to_string('mail_template.html', {'varname':'value'}) # render with dynamic value 
text_content = strip_tags(html_content) # Strip the html tag. So people can see the pure text at least. 

# create the email, and attach the HTML version as well. 
msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) 
msg.attach_alternative(html_content, "text/html") 
msg.send() 

Referencia

http://www.djangofoo.com/250/sending-html-email/comment-page-1#comment-11401

+1

+1 EmailMultiAlternatives. Documentos oficiales: https://docs.djangoproject.com/en/1.8/topics/email/#sending-alternative-content-types – dokkaebi

3

Prueba este ::::

https://godjango.com/19-using-templates-for-sending-emails/

sample code link

# views.py 

from django.http import HttpResponse 
from django.template import Context 
from django.template.loader import render_to_string, get_template 
from django.core.mail import EmailMessage 

def email_one(request): 
    subject = "I am a text email" 
    to = ['[email protected]'] 
    from_email = '[email protected]' 

    ctx = { 
     'user': 'buddy', 
     'purchase': 'Books' 
    } 

    message = render_to_string('main/email/email.txt', ctx) 

    EmailMessage(subject, message, to=to, from_email=from_email).send() 

    return HttpResponse('email_one') 

def email_two(request): 
    subject = "I am an HTML email" 
    to = ['[email protected]'] 
    from_email = '[email protected]' 

    ctx = { 
     'user': 'buddy', 
     'purchase': 'Books' 
    } 

    message = get_template('main/email/email.html').render(Context(ctx)) 
    msg = EmailMessage(subject, message, to=to, from_email=from_email) 
    msg.content_subtype = 'html' 
    msg.send() 

    return HttpResponse('email_two') 
Cuestiones relacionadas