Creazione di modelli di email con Django



Answers

Ragazzi e ragazze!

A partire dal 1.7 di Django nel metodo html_message stato aggiunto il parametro html_message .

html_message: se viene fornito html_message, l'email risultante sarà un'e-mail multipart / alternativa con messaggio come testo / tipo di contenuto semplice e html_message come tipo di contenuto text / html.

Quindi puoi solo:

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,
    'some@sender.com',
    ['some@receiver.com'],
    html_message=msg_html,
)
Question

Voglio inviare email HTML, usando i template di Django come questo:

<html>
<body>
hello <strong>{{username}}</strong>
your account activated.
<img src="mysite.com/logo.gif" />
</body>

Non riesco a trovare nulla su send_mail , e django-mailer invia solo modelli HTML, senza dati dinamici.

Come posso utilizzare il motore di template di Django per generare e-mail?




Utilizza EmailMultiAlternatives e render_to_string per utilizzare due modelli alternativi (uno in testo normale e uno in 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 = ['to@example.com']
email.send()



Django Mail Templated è un'applicazione di Django ricca di funzionalità per inviare e-mail con il sistema di template Django.

Installazione:

pip install django-mail-templated

Configurazione:

INSTALLED_APPS = (
    ...
    'mail_templated'
)

Modello:

{% block subject %}
Hello {{ user.name }}
{% endblock %}

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

Pitone:

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

Maggiori informazioni: https://github.com/artemrizhov/django-mail-templated







Related