Je veux envoyer des e-mails HTML, en utilisant des modèles Django comme celui-ci:
<html>
<body>
hello <strong>{{username}}</strong>
your account activated.
<img src="mysite.com/logo.gif" />
</body>
Je ne trouve rien send_mail
, et django-mailer envoie uniquement des modèles HTML, sans données dynamiques.
Comment utiliser le moteur de modèle de Django pour générer des e-mails?
1.7
offreshtml_message
àsend_email
stackoverflow.com/a/28476681/953553Réponses:
À partir des documents , pour envoyer des e-mails HTML, vous souhaitez utiliser d'autres types de contenu, comme ceci:
Vous aurez probablement besoin de deux modèles pour votre e-mail - un texte brut qui ressemble à ceci, stocké dans votre répertoire de modèles sous
email.txt
:et un HTMLy, stocké sous
email.html
:Vous pouvez ensuite envoyer un e-mail à l'aide de ces deux modèles en utilisant
get_template
, comme ceci:la source
plaintext
ethtmly
, et de simplement définir des modèles et des contextes lorsque vous définisseztext_content
ethtml_content
.Garçons et filles!
Depuis la méthode 1.7 de Django dans send_email , le
html_message
paramètre a été ajouté.Vous pouvez donc simplement:
la source
render_to_string
astuce, très pratique.send_mail
n'est pas possible de définir un en-tête personnalisé comme ieReturn-Path
qui peut être défini avec leEmailMultiAlternatives's constructor header parameter
J'ai créé django-templated-email dans le but de résoudre ce problème, inspiré par cette solution (et la nécessité, à un moment donné, de passer de l'utilisation de modèles django à l'utilisation d'un ensemble mailchimp, etc. de modèles pour les e-mails transactionnels et modèles pour mon propre projet). C'est toujours un travail en cours, mais pour l'exemple ci-dessus, vous feriez:
Avec l'ajout de ce qui suit à settings.py (pour compléter l'exemple):
Cela recherchera automatiquement les modèles nommés 'templated_email / email.txt' et 'templated_email / email.html' pour les parties plain et html respectivement, dans les répertoires / chargeurs de modèle django normaux (se plaindre s'il ne peut pas en trouver au moins un) .
la source
django.shortcuts.send_templated_mail
: code.djangoproject.com/ticket/17193Utilisez EmailMultiAlternatives et render_to_string pour utiliser deux modèles alternatifs (un en texte brut et un en html):
la source
J'ai créé Django Simple Mail pour avoir un modèle simple, personnalisable et réutilisable pour chaque e-mail transactionnel que vous souhaitez envoyer.
Le contenu et les modèles des e-mails peuvent être modifiés directement depuis l'administrateur de django.
Avec votre exemple, vous enregistreriez votre email:
Et envoyez-le de cette façon:
J'adorerais avoir des commentaires.
la source
Il y a une erreur dans l'exemple .... si vous l'utilisez tel qu'il est écrit, l'erreur suivante se produit:
Vous devrez ajouter l'importation suivante:
et changez le dictionnaire pour qu'il soit:
Voir http://docs.djangoproject.com/en/1.2/ref/templates/api/#rendering-a-context
la source
Django Mail Templated est une application Django riche en fonctionnalités pour envoyer des e-mails avec le système de modèles Django.
Installation:
Configuration:
Modèle:
Python:
Plus d'informations: https://github.com/artemrizhov/django-mail-templated
la source
Je sais que c'est une vieille question, mais je sais aussi que certaines personnes sont comme moi et recherchent toujours des réponses actualisées, car les anciennes réponses peuvent parfois avoir des informations obsolètes si elles ne sont pas mises à jour.
C'est maintenant janvier 2020, et j'utilise Django 2.2.6 et Python 3.7
Remarque: J'utilise DJANGO REST FRAMEWORK , le code ci-dessous pour envoyer des e-mails était dans un ensemble de vues de modèle dans mon
views.py
Donc, après avoir lu plusieurs belles réponses, c'est ce que j'ai fait.
Important! Alors, comment
render_to_string
obtient-onreceipt_email.txt
etreceipt_email.html
? Dans monsettings.py
, j'aiTEMPLATES
et voici à quoi ça ressembleFaites attention à
DIRS
, il y a cette ligneos.path.join(BASE_DIR, 'templates', 'email_templates')
.Cette ligne est ce qui rend mes modèles accessibles. Dans mon project_dir, j'ai un dossier appelétemplates
et un sous-répertoire appeléemail_templates
comme çaproject_dir->templates->email_templates
. Mes modèlesreceipt_email.txt
etreceipt_email.html
sont sous le sous-email_templates
répertoire.Permettez-moi d'ajouter cela, mon
recept_email.txt
apparence ressemble à ceci;Et, mon
receipt_email.html
ressemble à ceci;la source
J'ai écrit un extrait qui vous permet d'envoyer des e-mails rendus avec des modèles stockés dans la base de données. Un exemple:
la source
Si vous souhaitez des modèles d'e-mails dynamiques pour votre courrier, enregistrez le contenu de l'e-mail dans vos tables de base de données. C'est ce que j'ai enregistré en tant que code HTML dans la base de données =
Selon vous:
Cela enverra au modèle HTML dynamique ce que vous avez enregistré dans Db.
la source
send_emai()
n'a pas fonctionné pour moi, donc j'ai utiliséEmailMessage
ici dans les django docs .J'ai inclus deux versions de l'anser:
Si vous souhaitez inclure une version en texte brut de votre e-mail, modifiez ce qui précède comme ceci:
Mes versions plain et html ressemblent à ceci: plain_version.html:
html_version.html
la source
J'aime utiliser cet outil pour permettre d'envoyer facilement des e-mails HTML et TXT avec un traitement de contexte facile: https://github.com/divio/django-emailit
la source