Django - Envoi d'e-mails

Django est livré avec un moteur léger prêt et facile à utiliser pour envoyer des e-mails. Similaire à Python, vous avez juste besoin d'une importation de smtplib. Dans Django, il vous suffit d'importer django.core.mail. Pour commencer à envoyer des e-mails, modifiez le fichier settings.py de votre projet et définissez les options suivantes -

  • EMAIL_HOST - serveur smtp.

  • EMAIL_HOST_USER - Identifiant de connexion pour le serveur smtp.

  • EMAIL_HOST_PASSWORD - Informations d'identification du mot de passe pour le serveur smtp.

  • EMAIL_PORT - port du serveur smtp.

  • EMAIL_USE_TLS or _SSL - Vrai si connexion sécurisée.

Envoi d'un e-mail simple

Créons une vue "sendSimpleEmail" pour envoyer un simple e-mail.

from django.core.mail import send_mail
from django.http import HttpResponse

def sendSimpleEmail(request,emailto):
   res = send_mail("hello paul", "comment tu vas?", "[email protected]", [emailto])
   return HttpResponse('%s'%res)

Voici le détail des paramètres de send_mail -

  • subject - Objet de l'e-mail.

  • message - Corps de l'e-mail.

  • from_email - E-mail de.

  • recipient_list - Liste des adresses e-mail des destinataires.

  • fail_silently - Bool, si false send_mail lèvera une exception en cas d'erreur.

  • auth_user - Connexion de l'utilisateur si elle n'est pas définie dans settings.py.

  • auth_password - Mot de passe de l'utilisateur s'il n'est pas défini dans settings.py.

  • connection - Backend de messagerie.

  • html_message - (nouveau dans Django 1.7) s'il est présent, l'e-mail sera multipart / alternatif.

Créons une URL pour accéder à notre vue -

from django.conf.urls import patterns, url

urlpatterns = paterns('myapp.views', url(r'^simpleemail/(?P<emailto>
   [\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})/', 
   'sendSimpleEmail' , name = 'sendSimpleEmail'),)

Ainsi, en accédant à /myapp/simpleemail/[email protected], vous obtiendrez la page suivante -

Envoi de plusieurs courriels avec send_mass_mail

La méthode renvoie le nombre de messages remis avec succès. Ceci est identique à send_mail mais prend un paramètre supplémentaire; datatuple, notre vue sendMassEmail sera alors -

from django.core.mail import send_mass_mail
from django.http import HttpResponse

def sendMassEmail(request,emailto):
   msg1 = ('subject 1', 'message 1', '[email protected]', [emailto1])
   msg2 = ('subject 2', 'message 2', '[email protected]', [emailto2])
   res = send_mass_mail((msg1, msg2), fail_silently = False)
   return HttpResponse('%s'%res)

Créons une URL pour accéder à notre vue -

from django.conf.urls import patterns, url

urlpatterns = paterns('myapp.views', url(r'^massEmail/(?P<emailto1>
   [\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})/(?P<emailto2>
   [\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})', 'sendMassEmail' , name = 'sendMassEmail'),)

En accédant à /myapp/massemail/[email protected]/[email protected]/, nous obtenons -

Les détails des paramètres send_mass_mail sont -

  • datatuples - Un tuple où chaque élément est similaire (sujet, message, from_email, destinataire_list).

  • fail_silently - Bool, si false send_mail lèvera une exception en cas d'erreur.

  • auth_user - Connexion de l'utilisateur si elle n'est pas définie dans settings.py.

  • auth_password - Mot de passe de l'utilisateur s'il n'est pas défini dans settings.py.

  • connection - Backend de messagerie.

Comme vous pouvez le voir dans l'image ci-dessus, deux messages ont été envoyés avec succès.

Note - Dans cet exemple, nous utilisons Python smtp debuggingserver, que vous pouvez lancer en utilisant -

$python -m smtpd -n -c DebuggingServer localhost:1025

Cela signifie que tous vos e-mails envoyés seront imprimés sur stdout et que le serveur factice est exécuté sur localhost: 1025.

Sending e-mails to admins and managers using mail_admins and mail_managers methods

Ces méthodes envoient des e-mails aux administrateurs de site tels que définis dans l'option ADMINS du fichier settings.py et aux gestionnaires de sites tels que définis dans l'option MANAGERS du fichier settings.py. Supposons que nos options ADMINS et MANAGERS ressemblent à -

ADMINS = (('polo', '[email protected]'),)

MANAGERS = (('popoli', '[email protected]'),)

from django.core.mail import mail_admins
from django.http import HttpResponse

def sendAdminsEmail(request):
   res = mail_admins('my subject', 'site is going down.')
   return HttpResponse('%s'%res)

Le code ci-dessus enverra un e-mail à chaque administrateur défini dans la section ADMINS.

from django.core.mail import mail_managers
from django.http import HttpResponse

def sendManagersEmail(request):
   res = mail_managers('my subject 2', 'Change date on the site.')
   return HttpResponse('%s'%res)

Le code ci-dessus enverra un e-mail à chaque manager défini dans la section MANAGERS.

Détails des paramètres -

  • Subject - Objet de l'e-mail.

  • message - Corps de l'e-mail.

  • fail_silently - Bool, si false send_mail lèvera une exception en cas d'erreur.

  • connection - Backend de messagerie.

  • html_message - (nouveau dans Django 1.7) s'il est présent, l'e-mail sera multipart / alternatif.

Envoi d'un e-mail HTML

Envoyer un message HTML dans Django> = 1.7 est aussi simple que -

from django.core.mail import send_mail

from django.http import HttpResponse
   res = send_mail("hello paul", "comment tu vas?", "[email protected]", 
         ["[email protected]ail.com"], html_message=")

Cela produira un e-mail en plusieurs parties / alternatif.

Mais pour Django <1.7, l'envoi de messages HTML se fait via la classe django.core.mail.EmailMessage puis en appelant 'send' sur l'objet -

Créons une vue "sendHTMLEmail" pour envoyer un e-mail HTML.

from django.core.mail import EmailMessage
from django.http import HttpResponse

def sendHTMLEmail(request , emailto):
   html_content = "<strong>Comment tu vas?</strong>"
   email = EmailMessage("my subject", html_content, "[email protected]", [emailto])
   email.content_subtype = "html"
   res = email.send()
   return HttpResponse('%s'%res)

Détails des paramètres pour la création de la classe EmailMessage -

  • Subject - Objet de l'e-mail.

  • message - Corps de l'e-mail en HTML.

  • from_email - E-mail de.

  • to - Liste des adresses e-mail des destinataires.

  • bcc - Liste des adresses e-mail des destinataires «Cci».

  • connection - Backend de messagerie.

Créons une URL pour accéder à notre vue -

from django.conf.urls import patterns, url

urlpatterns = paterns('myapp.views', url(r'^htmlemail/(?P<emailto>
   [\w.%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4})/', 
   'sendHTMLEmail' , name = 'sendHTMLEmail'),)

En accédant à /myapp/htmlemail/[email protected], nous obtenons -

Envoi d'e-mail avec pièce jointe

Pour ce faire, utilisez la méthode «attach» sur l'objet EmailMessage.

Une vue pour envoyer un e-mail avec pièce jointe sera -

from django.core.mail import EmailMessage
from django.http import HttpResponse

def sendEmailWithAttach(request, emailto):
   html_content = "Comment tu vas?"
   email = EmailMessage("my subject", html_content, "[email protected]", emailto])
   email.content_subtype = "html"
   
   fd = open('manage.py', 'r')
   email.attach('manage.py', fd.read(), 'text/plain')
   
   res = email.send()
   return HttpResponse('%s'%res)

Détails sur les arguments d'attachement -

  • filename - Le nom du fichier à joindre.

  • content - Le contenu du fichier à joindre.

  • mimetype - Le type de mime du contenu de la pièce jointe.