Training Menu

Envoi d'email avec Django

Kevin TIAKOUANG DJOU
Kevin TIAKOUANG DJOU
Nov. 18, 2024 · 15.33 min read
0
Django
Envoi d'email avec Django

Envoi d'email avec Django

Introduction

L'envoi d'emails est une fonctionnalité courante dans de nombreux projets Django. Ce guide vous montre comment configurer et implémenter l'envoi d'emails de manière simple et efficace.

1. Configuration des paramètres d'envoi d'email

Configuration des paramètres dans `settings.py`

Avant toute chose installer les prerequis avec la comande pip install <nom_du_paquet>:
 
pip install django==5.1.3

 pip install python-decouple==3.8

 

Ajoutez les paramètres suivants à votre fichier `settings.py` :


 from decouple import config  # Assurez-vous d'importer `config`

 

EMAIL_BACKEND = config('EMAIL_BACKEND')

EMAIL_HOST = config('EMAIL_HOST')

EMAIL_PORT = config('EMAIL_PORT', cast=int)

EMAIL_USE_TLS = config('EMAIL_USE_TLS', cast=bool)

EMAIL_HOST_USER = config('EMAIL_HOST_USER')

EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD')

EMAIL_FROM = config('EMAIL_FROM')

 


 

Configuration dans le fichier `.env`

Ajoutez ces variables dans le fichier `.env` :


 EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend

EMAIL_HOST=smtp.gmail.com

EMAIL_PORT=587

EMAIL_USE_TLS=True

EMAIL_HOST_USER=<votre_email@gmail.com>

EMAIL_HOST_PASSWORD=<votre_mot_de_passe_d_application>

EMAIL_FROM=<votre_email@gmail.com>


 

Important:
 - Si vous utilisez Gmail, vous devez activer les mots de passe d’application pour votre compte Google.
 - Consultez ce lien pour savoir comment activer les mots de passe d'application :
https://support.google.com/accounts/answer/185833?hl=fr.

2. Création de la fonction d'envoi d'emails

Créez une fonction pour centraliser l'envoi des emails :


 from django.conf import settings

 from django.core.mail import EmailMessage

 

 def send_mail(subject, body, to):

     email = EmailMessage(

         subject=subject,

         body=body,

         from_email=settings.EMAIL_FROM,

         to=to

     )

     email.content_subtype = "html"  # Permet d'envoyer un contenu HTML

     email.send()


 

3. Mise en place du formulaire d'envoi d'email

Créez un formulaire pour collecter les informations nécessaires à l'envoi d'un email :


 from django import forms

 from django.forms import Form

 

 class SendEmailForm(Form):

     subject = forms.CharField(

         label="Sujet",

         widget=forms.TextInput(attrs={"class": "form-control", "id": "subject"}),

         required=True,

     )

     message = forms.CharField(

         label="Message",

         widget=forms.Textarea(attrs={"class": "form-control", "id": "message", "rows": 4}),

         required=True,

     )

     email = forms.EmailField(

         label="Email",

         widget=forms.EmailInput(attrs={"class": "form-control", "id": "email"}),

         required=True,

     )


 

4. La vue et les URLs

Vue

Créez une classe pour gérer l'affichage et la soumission du formulaire :


  import logging

 from django.contrib import messages

 from django.shortcuts import render

 from django.views.generic import View

 from email_app.emails import send_mail

 from email_app.forms import SendEmailForm

 

logger = logging.getLogger(__name__)

 

 

 class Home(View):

     def get(self, request):

         form = SendEmailForm()

         return render(request, "home.html", context={"form": form})

 

     def post(self, request):

         form = SendEmailForm(request.POST)

         if form.is_valid():

             try:

                 send_mail(

                     form.cleaned_data["subject"],

                     form.cleaned_data["message"],

                     [form.cleaned_data["email"]]

                 )

                 messages.success(request, "Email sent successfully!")

                 # Réinitialise le champ "message" tout en gardant les autres données

                 form = SendEmailForm(initial={

                     "email": form.cleaned_data["email"],

                     "subject": form.cleaned_data["subject"]

                 })

             except Exception as e:

    logger.error(f"Error occur : {e}")

                 messages.error(request, f"Error occurred during email sending: {str(e)}", extra_tags="danger")

         return render(request, "home.html", context={"form": form})


 

URLs

Ajoutez les routes nécessaires dans `urls.py` :


 from django.contrib import admin

 from django.urls import path

 from email_app.views import Home

 

urlpatterns = [

     path("admin/", admin.site.urls),

     path("", Home.as_view(), name="home"),

]

 

 

5. Démonstation

 

 


 

Conclusion

Avec cet article, nous avons finalisé la mise en place de l'envoi d'emails avec Django. L'intégration de cette fonctionnalité offre une solution essentielle pour communiquer avec vos utilisateurs, que ce soit pour des notifications, des confirmations ou des échanges personnalisés. Ce guide constitue une base robuste pour ajouter des interactions email dans vos projets Django. 

 

Dans un prochain article, nous explorerons comment optimiser cette fonctionnalité en envoyant les emails en arrière-plan, afin d'améliorer les performances de votre application et de garantir une meilleure expérience utilisateur. N'hésitez pas d'ici là à adapter et personnaliser le code pour répondre aux besoins spécifiques de vos applications.

0

Applaudissez pour montrer votre soutien

Kevin TIAKOUANG DJOU

Kevin TIAKOUANG DJOU

2 Followers · Writer for Django

Passionné de Django pour sa facilité à créer des applications web robustes, je serais ravi de mettre mes compétences en Python-Django au service to… Read more