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.

17
demandé sur Ankit Jaiswal 2010-06-09 14:47:55

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

36
répondu Marvin W 2018-01-16 04:13:30

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.

12
répondu Babken Vardanyan 2018-04-18 08:18:35

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'.

9
répondu blokeley 2010-06-09 11:31:38

Essayez ceci::::

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

exemple de lien de code

# 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')
5
répondu vijay 2015-08-31 16:30:03

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.

1
répondu Javed 2018-07-26 04:34:04