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 monviews.py
Donc, après avoir lu plusieurs belles réponses, c'est ce que j'ai fait.
from django.template.loader import render_to_string
from django.core.mail import EmailMultiAlternatives
def send_receipt_to_email(self, request):
emailSubject = "Subject"
emailOfSender = "email@domain.com"
emailOfRecipient = 'xyz@domain.com'
context = ({"name": "Gilbert"}) #Note I used a normal tuple instead of Context({"username": "Gilbert"}) because Context is deprecated. When I used Context, I got an error > TypeError: context must be a dict rather than Context
text_content = render_to_string('receipt_email.txt', context, request=request)
html_content = render_to_string('receipt_email.html', context, request=request)
try:
#I used EmailMultiAlternatives because I wanted to send both text and html
emailMessage = EmailMultiAlternatives(subject=emailSubject, body=text_content, from_email=emailOfSender, to=[emailOfRecipient,], reply_to=[emailOfSender,])
emailMessage.attach_alternative(html_content, "text/html")
emailMessage.send(fail_silently=False)
except SMTPException as e:
print('There was an error sending an email: ', e)
error = {'message': ",".join(e.args) if len(e.args) > 0 else 'Unknown Error'}
raise serializers.ValidationError(error)
Important! Alors, comment render_to_string
obtient-on receipt_email.txt
et receipt_email.html
? Dans mon settings.py
, j'ai TEMPLATES
et voici à quoi ça ressemble
Faites attention à DIRS
, il y a cette ligne os.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 ça project_dir->templates->email_templates
. Mes modèles receipt_email.txt
et receipt_email.html
sont sous le sous- email_templates
répertoire.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'templates', 'email_templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Permettez-moi d'ajouter cela, mon recept_email.txt
apparence ressemble à ceci;
Dear {{name}},
Here is the text version of the email from template
Et, mon receipt_email.html
ressemble à ceci;
Dear {{name}},
<h1>Now here is the html version of the email from the template</h1>
1.7
offreshtml_message
àsend_email
stackoverflow.com/a/28476681/953553