Mailing list avec Python
Objectif :
Développer un script Python pour envoyer un message à une liste
de clients. La liste étant sur un fichier Excel.
Procédure :
Fichier Excel
Le fichier s’appelle Destinataires.xlsx et comporte une
feuille (Feuil1). La première colonne est Nom, la deuxième est Prénom et la
troisième colonne est l’adresse mail du destinataire.
Pour ce script nous allons besoin de la librairie openpyxl
Si la librairie n’est pas installée, dans une fenêtre DOS, taper :
python –m pip install openpyxl
Nous allons aussi utiliser smtplib pour envoyer les mails à
travers les serveurs de google. Pour cela plusieurs solutions sont possibles
(voir https://support.google.com/a/answer/176600?hl=en)
On pourra envoyer jusqu’à 2000 messages par jour si on
utilise le serveur smtp.gmail.com. Pour cela il suffit d’utiliser une adresse
gmail (ou adresse G Suite) pour s’authentifier.
Commençons alors le script :
from openpyxl import load_workbook
import smtplib
Nous allons créer quelques variables :
monMail="adressemail" #Adresse mail sur gmail qui
sert à l’authentification
monPassword=" " # Mot de passe de l’adresse
monMail
smtpserver='smtp.gmail.com' # Serveur smtp pour l’envoi des
messages
port=587 # port utilisé par le serveur
On va se connecter au serveur de gmail
server=smtplib.SMTP(smtpserver,port) # server est un objet
Pour commencer le dialogue avec le serveur smtp, on fait
appel à la méthode ehlo()
server.ehlo()
Puis passer en mode TLS (Transport Layer Security). Toutes
les commandes qui vont suivre seront alors cryptés.
server.starttls()
Nous allons ensuite nous authentifier auprès du serveur en utilisant
la méthode login en fournissant comme arguments l’adresse mail et le mot de
passe du compte sur gmail ou G suite
server.login(monMail,monPassword)
Il nous reste à balayer la liste, récupérer le nom, prénom
et l’adresse mail puis utiliser la méthode sendmail pour envoyer un message
Nous allons d’abord ouvrir le fichier Excel
wb =
load_workbook("Destinataires.xlsx")
puis la feuille Feuil1
ws=wb["Feuil1"]
i=2
while ws['C'+str(i)].value !=None: # On arrête la boucle
quand il n y a plus d’adresse mail à traiter
toaddresse=ws['C'+str(i)].value
nom=ws['A'+str(i)].value
prenom=ws['B'+str(i)].value
msg="Bonjour " + nom + "
" + prenom
server.sendmail(monMail,toaddresse,"From: "+monMail +
"\n" + msg)
print(str(i)+" Message sent to "
+ toaddresse)
i=i+1
Le message est reçu par tous les
destinataires
Office 365 considère que le
message est indésirable
Le script
complet est :
from openpyxl import load_workbook
import smtplib
monMail="adressemail" #Adresse mail sur gmail qui sert à l’authentification
monPassword=" " # Mot de passe de l’adresse monMail
smtpserver='smtp.gmail.com'
port=587
server=smtplib.SMTP(smtpserver,port)
server.ehlo()
server.starttls()
server.login(monMail,monPassword)
wb = load_workbook("Destinataires.xlsx")
ws=wb["Feuil1"]
i=2
while ws['C'+str(i)].value !=None:
ToAddress=ws['C'+str(i)].value
nom=ws['A'+str(i)].value
prenom=ws['B'+str(i)].value
msg="Bonjour " + nom + " " + prenom
server.sendmail(monMail,ToAddress,"From: "+monMail + "\n" + msg)
print(str(i-1)+" Message sent to " + ToAddress)
i=i+1
from openpyxl import load_workbook
import smtplib
monMail="adressemail" #Adresse mail sur gmail qui sert à l’authentification
monPassword=" " # Mot de passe de l’adresse monMail
smtpserver='smtp.gmail.com'
port=587
server=smtplib.SMTP(smtpserver,port)
server.ehlo()
server.starttls()
server.login(monMail,monPassword)
wb = load_workbook("Destinataires.xlsx")
ws=wb["Feuil1"]
i=2
while ws['C'+str(i)].value !=None:
ToAddress=ws['C'+str(i)].value
nom=ws['A'+str(i)].value
prenom=ws['B'+str(i)].value
msg="Bonjour " + nom + " " + prenom
server.sendmail(monMail,ToAddress,"From: "+monMail + "\n" + msg)
print(str(i-1)+" Message sent to " + ToAddress)
i=i+1
Commentaires