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

Commentaires

Posts les plus consultés de ce blog

Installation de glpi 0.9 sur un serveur Windows 2012 R2

Accéder à PhpMyAdmin sans mot de passe

Impossible de joindre un fichier dans OWA