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.