mardi 15 décembre 2009

Script pour envoyer des e-mails en masse avec Django

J'ai eu besoin, lors d'un récent projet,(http://www.christelle-pothier.fr) d'envoyer des e-mails en masse. Nous allons voir aujourd'hui comment le faire simplement avec Django.

Le settings.py



Dans un premier temps, vous devez configurer le settings.py de votre projet en renseignant les champs :
EMAIL_HOST = "votre site" si par exemple votre site est http://www.exemple.com, le champ sera donc exxemple.com
EMAIL_HOST_USER = suivant votre fournisseur d'email, le nom d'utilisateur sera seulement votre login ou votre adresse e-mail complète : moi@exemple.com
EMAIL_HOST_PASSWORD votre mot de passe à votre service de mail

Et voila, c'est pas plus compliqué que cela, votre compte de messagerie est configuré pour Django.

Premiers tests



Pour tester vos règlages, le mieux reste d'envoyer un mail:
ouvrez donc une console et lancez le shell django :

>>> python manage.py shell
Python 2.6.4 (r264:75706, Nov  2 2009, 14:44:17)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.mail import send_mail

cette première ligne va donc importeer la fonction d'envoie de mail.
envoyons donc réellement un mail :

>>>send_mail('un sujet','le message','expediteur@domaine.com',['destinataire@domaine.com'], fail_silently=False)

je ne commenterais pas la fonction tellement c'est simple. sachez simplement que la variable fail_silently permet de savoir tout de suitte si le mail est bien parti. Vous pourrez bien sur supprimer cette ligne en production.

 

Envoi en masse

Donc votre compte en correctement configuré, vous avez testé l'envoi de quelques e-mails, il nous faut maintenant tester l'envoi en masse. Commme vous vous en êtes peut être apperçu lors de notre test, le destinataire est inséré dans une liste. Ceela va nous permettre d'envoyer notre mail à plusieurs destinataires :

>>>
send_mail('un sujet','le message','expediteur@domaine.com',['destinataire@domaine.com', 'destinataire2@domaine.com], fail_silently=False)

donc vous avez une liste de destinataires a qui vous voulez envoyer le même e-mail. Vous pouvez donc créer un fichier envoi.py :

# -*- coding: utf-8 -*-

from django.core.mail import send_mail
subject = u"votre  sujet"
message = u"Votre message"
sender = "expéditeur@domaine.com"
recipients =["la liste des destinataire"]

for recipient in recipients:
    recipient =[recipient]
    send_mail(subject, message, sender, recipient)

Mais pourquoi une boucle for me direz-vous ? N'aurions nous pas put tout simplement envoyer le message comme d'habitude ?
Si nous aurions pu mais l'avantage de cette méthode, c'est que nous allons envoyer un message unique à chaque destinataire et nous pas un message envoyé à plusieurs destinataires.

Aucun commentaire: