Vous êtes sur la page 1sur 4

Automatisation de l'envoie des emails

Quel est le scénario?

"""
Vous travaillez dans une entreprise qui envoie des rapports quotidiens à ses
clients par courrier électronique. L'objectif de ce projet est d'automatiser le
processus d'envoi de ces rapports par courrier électronique.

Voici les étapes à suivre pour automatiser ce processus :

Utilisez la bibliothèque smtplib pour vous connecter au serveur de messagerie


et envoyer les courriels.

Utilisez la bibliothèque email pour composer l'email, y compris l'adresse email


du destinataire, l'objet et le corps de l'email.

Utilisez la bibliothèque os pour accéder aux fichiers de rapport qui doivent


être envoyés.

Utilisez une boucle for pour parcourir la liste des destinataires et envoyer
l'e-mail et la pièce jointe.

Utilisez la bibliothèque schedule pour programmer l'exécution quotidienne du


script à une heure donnée.

Vous pouvez également créer un fichier journal pour garder une trace des
courriels qui ont été envoyés et des erreurs qui ont pu se produire au cours du
processus d'envoi.

"""

Résolution
-----------

L'envoie des mails peut fonctionner avec n'importe quel compte email, mais nous
allons utilser un compte gmail.

A. PREALABLES

1. Créez compte gmail (si vous n'en avez pas) et/ou connectez-vous depuis un
navigateur.
2. Cliquez sur votre compte et puis Manage your account
3. Dans la nouvelle fenêtre, cliquez sur Security
4. Vérifiez que la validation en deux étappes (two factor authetication) est
activée. Si cela n'est pas activé, suivez les étapes et activez le two factor
authentication pour votre compte.
5. Une fois cela est fait, cliquez sur "Mots de pass des des applications" ou "App
passwords"

6. Seclectionnez "Autre comme application" et Tapez un nom. Moi je tappe "Python"


comme nous travaillons avec python. Et cliquez sur GENERATE.

Copiez bien la clé, et enregistrez la quelque part pour ne pas la perdre. Et


cliquez sur DONE pour fermer la fenêtre.

B. DEVELOPPONS NOTRE SCRIPT.


1. Créons notre projet et ouvrons-le dans Visual studio.

2. Créons deux fichiers python et ouvrons-les dans VS Code.


emails_config.py et emails.py

Dans le premier fichier, nous allons entrer les éléments de configuration


pour l'envoie des emails.

email_address_config="votre-email@gmail.com" # C'est cette email que enverra


les emails aux différents destinataires.
pwd_config="votre mot de pass d'application" # Le mot de pass de
l'application que vous avez créé précédemment.
server_config="smtp.gmail.com"
server_port_config=587

Dans le fichier emails.py, on va importer le fichier de configuration.

import email_config

3. Définitions des fonctions nécessaires

Nous allons définir deux fonctions. Une fonction pour l'envoie d'un email et un
autre pour l'envoie d'un mail à plusieur destinataires.

Première fonction:

def sendemail(recipient, subject, body):


pass

Cette fonction a trois paramètres


recipient : destinataire
subject: l'object du message
body: c'est le message lui-même

Connectons-nous au server SMTP et envoyons un mail: Modifions notre fonctions.


N'oubliez pas d'importer la librairie smtplib

with smtplib.SMTP(email_config.server_config,
email_config.server_port_config) as s:
s.starttls()
s.login(email_config.email_address_config, email_config.pwd_config)
s.send_message(body)

Appelons notre fonctions et voyons si tout fonctionne normalement.

sendmail("destinataire@gmail.com", "Test","Bonjour. C'est notre premier test")

Vérifiez votre boite mail (pour l'adresse destinataire@gmail.com) et vous verrez


bien un mail.
Cependant, il s'agit d'un mail qui n'a pas d'objet comme entré dans l'appel de la
fonction.
Cela demande alors que nous reconfigurions notre message.

Nous allons importer le message la bibliothèque nous permettant de formater notre


message.

from email.message import EmailMessage


Ensuite, on peut formater notre mail de la manière suivante: Ajoutons ces quelques
lignes dans notre fonction avant l'instrution de connection au server.

msg = EmailMessage()
msg["Subject"] = subject
msg["From"] = "Votre nom"
msg["To"] = recipient
msg.set_content(body)

Puis modifions alors s.send_message(body) et donnons-lui msg en argument:


s.send_message(body)

Excécutons et observons les résultats. Votre email est de plus en plus claire.
Vous pouvez aussi écrire votre message sur plusieurs lignes.
Par exemple:

mon_message= """Bonjour
Voici notre rapport du mois de MArs 2023.
Bonne réception.

Bob"""

Dans votre appel de fonction, donnez la variable mon_message comme message à


envoyer.
Exécutez et observez les résultats.

Deuxième fonction:

def send_emails():
reciptients = ["emails@worldmerit.org", "email@qsimpact.org",
"email@gmail.com"]
daily_message ="""Hi,
Find the daily report attached.
Thanks"""
for recipient in reciptients:
sendemail(recipient,"Today Report", daily_message)

Dans cette fonction, nous avons recipients qui contient, la liste des
destinataires, notre message contenu dans la variable daily_message.
Ensuite nous envoyons les mails en parcourant la liste des destinataires grâce à la
boulce for en appelant chaque le fonction sendmail(arg1, arg2, arg3).

Vous pouvez choisir de passer la liste des destinataires en paramètres à la


fonction.
Nous faisons ceci en guise de test.

Pour envoyez les emails, appelez désormais la fonction send_emails() et exécutez


pour voir les résultats chez les destinataires.

4. Ajouter une pièce jointe à notre email.

Puisque le rapport doit être joint au mail, nous devons ajouter une pièce jointe.
Nous allons alors modifier notre fonction d'envoie d'email pour qu'elle soit en
mesure de joindre un fichier. Nous lui ajoutons donc un paramètre. Ensuite nous
importons os pour chercher le fichier sur notre post de travail et l'envoyer.

def sendemail(recipient, subject, body, filename=""):


#Message
msg = EmailMessage()
msg["Subject"] = subject
msg["From"] = "Albert Gubanja"
msg["To"] = recipient
msg.set_content(body)

# Attacher un fichier à partir du repertoir courant


if filename != "":
file_path = os.path.join("reports", filename)
with open(file_path, "rb") as f:
file_data = f.read()
file_name = os.path.basename(filename)
msg.add_attachment(file_data, maintype="text", subtype="plain",
filename=file_name)

.... (la suite du code de la fonction ici)

A partir de maintenant, pour envoyer le mail, vous devez désormais précisez le nom
du fichier à joindre au mail parmi les arguments. Selon ce script, votre fichier
doit se retrouver dans le repertoire courant. Sinon vous pouvez modifier et le
placer n'importe où sur votre ordinateur.

sendemail(recipient,"Today Report", daily_message, "march_report.txt")

Excécutez le code et observez les résultats.

5. Automatiser l'envoie des messages.

Nous allons automatiser l'envoie des messages de tel sorte que chaque jour, à une
certaine heure de la journée, notre script envoie automaquement les emails à sa
liste des destinataires.

On commence par importer le librairie schedule

# On programme l'envoie des mails chaque jours à 14:30


schedule.every().day.at("14:30").do(send_emails)

# On garde le script en exécution en attendant que l'heure de nouveaux


messages arrive
while True:
schedule.run_pending()
time.sleep(1)

Pour comprendre la libraire schedule, vous pouvez bien consulter la documentation.

Vous aimerez peut-être aussi