Un des intérêts principaux des langages de programmation, comme Python, est d’automatiser des tâches comme l’envoi de mail. Nous allons voir dans ce tutoriel comment écrire un programme Python permettant d’envoyer un mail à partir d’un compte Gmail.
Ce tutoriel peut être appliqué à tout ordinateur notamment un Raspberry Pi.
Pour envoyer des mails à partir de microcontrôleur compatible Arduino. Vous pouvez lire ce tutoriel.
Matériel
- Ordinateur ou Raspberry Pi
- Compte Gmail
Principe de fonctionnement
Pour envoyer un mail avec Python, nous allons utiliser le protocole SMTP (Simple Mail Transfer Protocol), nous allons donc passer par un serveur qui gère l’envoi de mail. Comme le serveur smtp de Gmail. Pour pouvoir utiliser ce serveur, il faut un compte Gmail (création gratuite) et il faut activer la validation en deux étapes.
Configuration du compte Gmail
Sur la page de gestion du compte, aller dans l’onglet « Sécurité », puis cherchez l’encart « Connexion à Google ».
Ajouter la validation en deux étapes.
Générer un mot de passe d’accès au compte pour une application donnée
Il vous suffit de recopier dans le code Python ci-dessous, l’identifiant utilisateur (l’adresse Gmail) et le mot de passe délivré par Google (encart jaune ci-dessus).
Cette fonction est volontairement simplifier pour montrer l’envoie de mail mais il est possible de la modifier afin d’envoyer des sujet, corps de message et informations différentes.
Code
Pour gérer le protocole STMP, nous allons utiliser la librairie stmplib que vous pouvez installer avec la commande
pip install smtplib
Pour une réutilisation plus simple du code, nous avons créer la classe EmailSenderClass pour faciliter l’envoi de mail. N’oublier pas de remplacer l’adresse du destinataire « destinataire@email.com » par la vôtre en bas du script dans la fonction
email.sendHtmlEmailTo("Admin","destinataire@email.com","Ceci est un mail automatique envoyé à partir d'un script Python.")
#!/usr/bin/env python # -*- coding: utf-8 -*- #Libraries import sys import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders from email.header import Header from email.utils import formataddr EMAIL_HTML_TEMPLATE="""<html> <head> </head> <body> <p style ="margin: 5px 0;line-height: 25px;">Bonjour {},<br> <br> Ceci est un mail au format html. <br> {} <br> Bien à vous,<br> {} <br> </p> </body> </html> """ class EmailSenderClass: def __init__(self): """ """ self.logaddr = "<gmail address>" self.fromaddr = "contact@domaine.com"# alias self.password = "<gmail app password"# def sendMessageViaServer(self,toaddr,msg): # Send the message via local SMTP server. server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(self.logaddr, self.password) text = msg.as_string() server.sendmail(self.fromaddr, toaddr, text) server.quit() def sendHtmlEmailTo(self,destName,destinationAddress,msgBody): #Message setup msg = MIMEMultipart() msg['From'] = "Me<"+self.fromaddr+">" msg['To'] = destinationAddress msg['Subject'] = "Hello mail" hostname=sys.platform txt = EMAIL_HTML_TEMPLATE txt=txt.format(destName,msgBody,hostname) #Add text to message msg.attach(MIMEText(txt, 'html')) print("Send email from {} to {}".format(self.fromaddr,destinationAddress)) self.sendMessageViaServer(destinationAddress,msg) if __name__ == "__main__": email= EmailSenderClass() email.sendHtmlEmailTo("Admin","destinataire@email.com","Ceci est un mail automatique envoyé à partir d'un script Python.")
Résultat
Après avoir lancé le script, vous devriez recevoir dans votre boite de réception le mail décrit dans le programme.