Fermer

juillet 24, 2023

Envoi d’e-mails via Gmail avec Python —

Envoi d’e-mails via Gmail avec Python —


Dans cette astuce rapide, extraite de Python utile, Stuart vous montre comment utiliser Python pour envoyer des e-mails via Gmail. Cela peut être utile pour envoyer des rapports d’état et des résumés d’activités, par exemple.

Lors de l’écriture de scripts pour notre propre usage, il est utile de pouvoir envoyer des e-mails de leur part. Par exemple, si nous construisons un script qui s’exécute régulièrement en tant que tâche planifiée, le fait qu’il nous envoie un rapport récapitulatif après son exécution peut être un bon moyen de vérifier que le script a fait ce qu’il était censé faire, et aussi de voir ce qu’il a trouvé. Quelque chose qui télécharge régulièrement des données à partir d’une API HTTP, puis les traite, peut nous envoyer par e-mail une description de ce qu’il a trouvé, afin que nous puissions aller lire ses résultats.

Pour plus de détails sur la configuration des tâches planifiées, consultez le les fenêtres, macOSou Cron Linux Documentation.

Il existe de nombreux services de messagerie programmatique, tels que SendGrid, Mandrill et Mailgun. Ceux-ci sont utiles si nous générons beaucoup d’e-mails. Ils ont des API officielles et des plans payants, et si nous mettons en place une opération à grande échelle, cela vaut certainement la peine d’envisager de s’inscrire à l’un de ces services et d’utiliser leurs bibliothèques Python pour envoyer des e-mails. Mais pour quelque chose de petit ou de personnel, cela peut sembler demander beaucoup d’efforts, et il existe une alternative si nous avons un compte Gmail (comme beaucoup de gens le font).

Il y a un officiel API et module Google Gmail Python, mais c’est assez ennuyeux à configurer et à utiliser. Python est livré avec le smtplib et e-mail modules dans le cadre de la bibliothèque intégrée, et ceux-ci sont parfaitement capables d’envoyer des e-mails via Gmail après une petite configuration. Nous pouvons même les utiliser pour envoyer des e-mails de nous-mêmes pour nous-mêmes. Nous ne pouvons cependant pas envoyer trop d’e-mails de cette façon. Si nous voulons envoyer des dizaines ou des centaines d’e-mails à de nombreux destinataires différents, il est préférable d’enquêter sur les services de messagerie programmatique mentionnés ci-dessus. Mais en tant que notification par e-mail après une tâche planifiée, l’utilisation de Gmail à partir de Python peut être la solution personnelle idéale.

Pour utiliser notre compte Gmail pour envoyer des e-mails de cette manière, nous devons d’abord configurer un mot de passe de l’application pour notre script Python à utiliser. Allez à la Mots de passe d’application de votre compte Google, et sous Sélectionnez l’applicationchoisir Posteret sous Choisir un appareil choisir Autre (nom personnalisé) et saisissez un nom (tel que « Mon script Python »). Un écran répertoriant notre nouveau mot de passe d’application s’affichera. Notez ce mot de passe quelque part.

Écran de mot de passe de l'application Gmail affichant le mot de passe de l'application nouvellement généré

Pour envoyer un e-mail, nous utiliserons le smtplib module. Tout d’abord, nous devons définir le contenu de notre e-mail. Cette partie est notre travail. C’est une chaîne Python, nous pouvons donc substituer des valeurs, utiliser un langage de modèle ou la construire à partir d’une liste ; tout ce qui est pratique. Ici, nous allons utiliser un exemple simple :

email_text = f"""
Hi! This is the report from our script.

We have added 1 + 2 and gotten the answer {1+2}.

Bye!
"""

Nous allons également définir deux variables pour conserver les détails de notre compte Gmail : le nom du compte (qui est la partie de notre adresse Gmail avant @gmail.com) et le mot de passe de l’application que nous venons de créer :

GMAIL_USERNAME = "mygmailaccount12345"
GMAIL_APP_PASSWORD = "yxyloqscucpxdsxq"

Ensuite, nous allons créer le message en tant qu’objet à l’aide de la email module. Un e-mail peut avoir de nombreuses propriétés différentes, mais les plus importantes ici (en plus du texte du corps) sont To, Fromet Subject. From sera défini sur notre adresse Gmail, que nous avons déjà définie, et To doit être une chaîne contenant l’adresse e-mail à laquelle l’e-mail est envoyé. Il peut s’agir de notre propre adresse, et si l’e-mail est destiné à plusieurs personnes, nous devons séparer les adresses par des virgules. Nous allons les définir dans une liste, car nous aurons besoin de la liste plus tard :

recipients = ["sil@kryogenix.org"]
msg = MIMEText(email_text)
msg["Subject"] = "Email report: a simple sum"
msg["To"] = ", ".join(recipients)
msg["From"] = f"{GMAIL_USERNAME}@gmail.com"

Enfin, nous utiliserons smtplib pour vous connecter au serveur de messagerie de Gmail, connectez-vous avec nos informations fournies et envoyez l’e-mail. SMTP est le protocole sous-jacent utilisé pour envoyer des e-mails. Lorsque nous envoyons un e-mail à partir de notre application de messagerie normale, SMTP est la manière dont l’application le fait. Ici, nous le faisons directement à partir de notre propre code :

smtp_server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
smtp_server.login(GMAIL_USERNAME, GMAIL_APP_PASSWORD)
smtp_server.sendmail(msg["From"], recipients, msg.as_string())
smtp_server.quit()

Notre email devrait maintenant être envoyé. Sachez, bien sûr, qu’il s’agit d’une introduction, nous n’avons donc fait aucune gestion des erreurs ou validation des entrées. Comme mentionné, si nous envoyons beaucoup d’e-mails, nous devrions envisager d’utiliser un service dédié, et nous devrions réfléchir à la nécessité de gérer les erreurs, les échecs d’envoi, etc. Mais l’envoi d’un e-mail d’alerte à nous-mêmes, par exemple, peut être fait utilement avec un code simple comme celui-ci.

Cette astuce rapide est un extrait de Python utiledisponible sur SitePoint Premium et auprès des revendeurs de livres numériques.






Source link