Envoyer des e-mails en utilisant Python

En tant qu'exercice d'apprentissage, j'ai récemment creusé dans Python 3 pour voir comment je pouvais déclencher un tas d'e-mails. Il existe peut-être des méthodes plus simples pour faire cela dans un environnement de production, mais les suivantes ont bien fonctionné pour moi.

Alors, voici un scénario: vous avez les noms et les adresses e-mail d'un groupe de contacts. Et vous voulez envoyer un message à chacun de ces contacts, tout en ajoutant un «Cher [nom]» en haut du message.

Par souci de simplicité, vous pouvez stocker les coordonnées dans un fichier plutôt que dans une base de données. Vous pouvez également stocker le modèle du message que vous souhaitez envoyer dans un fichier.

Le module smtplib de Python est fondamentalement tout ce dont vous avez besoin pour envoyer des e-mails simples, sans aucune ligne d'objet ou de telles informations supplémentaires. Mais pour les vrais e-mails, vous avez besoin d'une ligne d'objet et de nombreuses informations - peut-être même des images et des pièces jointes.

C'est là qu'intervient le package de courrier électronique de Python. Gardez à l'esprit qu'il n'est pas possible d'envoyer un message électronique en utilisant le emailpackage seul. Vous avez besoin d'une combinaison des deux emailet smtplib.

Assurez-vous de consulter la documentation officielle complète pour ces deux éléments.

Voici quatre étapes de base pour envoyer des e-mails à l'aide de Python:

  1. Configurez le serveur SMTP et connectez-vous à votre compte.
  2. Créer l' MIMEMultipartobjet de message et chargez -les en - têtes appropriés pour From, Toet les Subjectchamps.
  3. Ajoutez le corps de votre message.
  4. Envoyez le message à l'aide de l'objet serveur SMTP.

Maintenant, laissez-moi vous expliquer tout le processus.

Disons que vous avez un fichier de contacts mycontacts.txtcomme suit:

[email protected] ~ $ cat mycontacts.txt john [email protected] katie [email protected]

Chaque ligne représente un seul contact. Nous avons le nom suivi de l'adresse e-mail. Je stocke tout en minuscules. Je laisserai à la logique de programmation le soin de convertir tous les champs en majuscules ou en majuscules si nécessaire. Tout cela est assez simple en Python.

Ensuite, nous avons le fichier de modèle de message message.txt.

[email protected] ~ $ cat message.txt Dear ${PERSON_NAME}, This is a test message. Have a great weekend! Yours Truly

Remarquez le mot « ${PERSON_NAME}»? C'est une chaîne de modèle en Python. Les chaînes de modèle peuvent facilement être remplacées par d'autres chaînes; dans cet exemple, ${PERSON_NAME}va être remplacé par le nom réel de la personne, comme vous le verrez bientôt.

Commençons maintenant par le code Python. Tout d'abord, nous devons lire les contacts du mycontacts.txtfichier. Nous pourrions tout aussi bien généraliser ce bit dans sa propre fonction.

La fonction get_contacts()prend un nom de fichier comme argument. Il ouvrira le fichier, lira chaque ligne (c'est-à-dire chaque contact), le divisera en nom et e-mail, puis les ajoutera en deux listes distinctes. Enfin, les deux listes sont renvoyées par la fonction.

Nous avons également besoin d'une fonction pour lire un fichier modèle (comme message.txt) et renvoyer un Templateobjet fabriqué à partir de son contenu.

Tout comme la fonction précédente, celle-ci prend un nom de fichier comme argument.

Pour envoyer l'e-mail, vous devez utiliser SMTP (Simple Mail Transfer Protocol). Comme mentionné précédemment, Python fournit des bibliothèques pour gérer cette tâche.

Dans l'extrait de code ci-dessus, vous importez smtplib, puis créez une instance SMTP qui encapsule une connexion SMTP. Il prend comme paramètre l'adresse de l'hôte et un numéro de port, qui dépendent tous deux entièrement des paramètres SMPT de votre fournisseur de services de messagerie. Par exemple, dans le cas d'Outlook, la ligne 4 ci-dessus serait à la place:

s = smtplib.SMTP(host='smtp-mail.outlook.com', port=587)

Vous devez utiliser l'adresse d'hôte et le numéro de port de votre fournisseur de services de messagerie pour que tout fonctionne.

MY_ADDRESSet PASSWORDau-dessus se trouvent deux variables qui contiennent l'adresse e-mail complète et le mot de passe du compte que vous allez utiliser.

Ce serait le bon moment pour récupérer les informations de contact et les modèles de message en utilisant les fonctions que nous avons définies ci-dessus.

names, emails = get_contacts('mycontacts.txt') # read contacts message_template = read_template('message.txt')

Maintenant, pour chacun de ces contacts, envoyons le courrier séparément.

Pour chaque nameet email( à partir du fichier de contacts), vous créez un objet MIMEMultipart, la mise en place du From, To, les en- Subjecttêtes de type de contenu comme un dictionnaire mot - clé, puis attacher le corps du message à l' MIMEMultipartobjet en tant que texte brut. Vous voudrez peut-être lire la documentation pour en savoir plus sur les autres types MIME que vous pouvez expérimenter.

Notez également qu'à la ligne 10 ci-dessus, je remplace ${PERSON_NAME}par le nom réel extrait du fichier de contacts à l'aide du mécanisme de création de modèles en Python.

Dans cet exemple particulier, je supprime l' MIMEMultipartobjet et le recrée à chaque fois que vous parcourez la boucle.

Une fois que cela est fait, vous pouvez envoyer le message en utilisant la fonction pratique send_message () de l'objet SMTP que vous avez créé précédemment.

Voici le code complet:

Voilà! Je pense que le code est maintenant assez clair.

N'hésitez pas à le copier et à le modifier si nécessaire.

Outre les documents officiels Python, je voudrais également mentionner cette ressource qui m'a beaucoup aidé.

Bon codage :)

J'ai initialement publié cet article ici. Si vous avez aimé cet article, veuillez frapper le petit cœur ci-dessous. Merci!