Comment envoyer un e-mail html avec django avec du contenu dynamique?
est-ce que quelqu'un peut s'il vous plaît m'aider à envoyer des e-mails html avec des contenus dynamiques. Une façon est de copier le code html entier dans une variable et d'y peupler le code dynamique dans des vues Django, mais cela ne semble pas être une bonne idée, car c'est un très gros fichier html.
n'hésitez pas à me faire part de vos suggestions.
Merci.
5 réponses
Exemple:
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', 'from@xxx.com', 'to@xxx.com'
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()
Référence
http://www.djangofoo.com/250/sending-html-email/comment-page-1#comment-11401
Django inclut le django.core.mail.send_mail
méthode de ces jours (2018), pas besoin d'utiliser EmailMultiAlternatives
classe directement. Faire ceci à la place:
from django.core import mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags
subject = 'Subject'
html_message = render_to_string('mail_template.html', {'context': 'values'})
plain_message = strip_tags(html_message)
from_email = 'From <from@example.com>'
to = 'to@example.com'
mail.send_mail(subject, plain_message, from_email, [to], html_message=html_message)
ceci enverra un e-mail qui est visible dans les deux navigateurs html-capables et montrera le texte clair dans les téléspectateurs e-mail estropiés.
Ceci devrait faire ce que tu veux:
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()
voir le django mail docs pour plus d'.
Essayez ceci::::
https://godjango.com/19-using-templates-for-sending-emails/
# 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 = ['buddy@buddylindsey.com']
from_email = 'test@example.com'
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 = ['buddy@buddylindsey.com']
from_email = 'test@example.com'
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')
si vous voulez des gabarits de courrier électronique dynamique pour votre courrier alors enregistrez le contenu de courrier électronique dans vos tables de base de données. C'est ce que j'ai enregistré comme code HTML dans la base de données =
<p>Hello.. {{ first_name }} {{ last_name }}. <br> This is an <strong>important</strong> {{ message }}
<br> <b> By Admin.</b>
<p style='color:red'> Good Day </p>
Dans votre point de vue:
from django.core.mail import EmailMultiAlternatives
from django.template.loader import get_template
def dynamic_email(request):
application_obj = AppDetails.objects.get(id=1)
subject = 'First Interview Call'
email = request.user.email
to_email = application_obj.email
message = application_obj.message
text_content = 'This is an important message.'
d = {'first_name': application_obj.first_name,'message':message}
htmly = FirstInterviewCall.objects.get(id=1).html_content #this is what i have saved previously in database which i have to send as Email template as mentioned above HTML code
open("partner/templates/first_interview.html", "w").close() # this is the path of my file partner is the app, Here i am clearing the file content. If file not found it will create one on given path.
text_file = open("partner/templates/first_interview.html", "w") # opening my file
text_file.write(htmly) #putting HTML content in file which i saved in DB
text_file.close() #file close
htmly = get_template('first_interview.html')
html_content = htmly.render(d)
msg = EmailMultiAlternatives(subject, text_content, email, [to_email])
msg.attach_alternative(html_content, "text/html")
msg.send()
ceci enverra le modèle HTML dynamique ce que vous avez enregistrer dans la base de données.