Envoyer des e-mails avec Python

Parfois, nous pouvons être dans une situation où nous devons envoyer des e-mails à plusieurs personnes de manière personnalisée. Bien que ces e-mails suivent le même format, les informations qu’ils contiennent varient d’un destinataire à l’autre. Dans cet article, je vais vous expliquer comment on peut envoyer des emails avec Python.

L’envoi manuel d’e-mails prend du temps et il y a beaucoup de marge d’erreur. Python nous permet d’automatiser ce processus très facilement, voyons comment nous pouvons envoyer des emails avec Python.

Comment envoyer des e-mails avec Python ?

Comme le script python accédera au compte Gmail pour envoyer des e-mails, nous devons activer Autoriser les applications moins sécurisées dans ce compte. Cela facilitera l’accès de notre programme python à votre compte. Par conséquent, il est recommandé de créer un compte temporaire à cet effet.

Dear ${PERSON_NAME},
You have secured the following marks in your mid-term exams:
Math - ${MATH}
English - ${ENG}
Science - ${SCI}

Ensuite, pour envoyer des e-mails avec Python, nous devons créer un fichier texte nommé template.txt. Ce fichier texte contient le format du corps de l’e-mail :

Ensuite, le prochain fichier que vous devriez avoir est un fichier CSV. Le fichier que j’utiliserai contient les détails nécessaires pour remplir les espaces réservés dans le fichier de modèle. Il contient les détails qui doivent être envoyés aux destinataires. Il peut s’agir d’un fichier Excel ou d’un fichier CSV.

Exemple de csv - envoie d'emails avec Python

Commençons le codage

Une fois que le fichier CSV et le fichier de modèle sont prêts, il est maintenant temps d’écrire le code pour envoyer des e-mails personnalisés avec python. Commençons par importer les modules nécessaires :

import smtplib
import csv
from string import Template
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

Je vais maintenant créer une fonction pour lire le fichier template.txt. La fonction ci-dessous renvoie l’objet modèle contenant le contenu du fichier template.txt :

def read_template(filename):
with open(filename, ‘r’, encoding=’utf-8') as template_file:
template_file_content = template_file.read()
return Template(template_file_content)

Nous devons maintenant configurer le serveur SMTP. Ce n’est pas une bonne pratique d’inclure l’adresse du compte, le mot de passe dans le script si vous allez partager ce script avec d’autres. Utilisez plutôt input() pour permettre à l’utilisateur de saisir son mot de passe lors de l’exécution du script :

MY_ADDRESS = *********@gmail.com #your gmail account address
PASSWORD = *********** #your password
s = smtplib.SMTP(host=’smtp.gmail.com’, port=587)
s.starttls()
s.login(MY_ADDRESS, PASSWORD)

Maintenant, la dernière étape consiste à créer le corps de l’e-mail. Pour cette tâche, nous devons :

  • Parcourez le fichier CSV et créez un message pour chaque ligne du fichier CSV.
  • Créez un message à l’aide de la fonction MIMEMultipart(), remplacez les détails (de chaque ligne) dans le modèle pour former le corps du message et enregistrez-le dans la variable message.
  • Configurez ensuite les paramètres tels que l’adresse de et vers, l’objet du message. Attachez la variable de message au corps du message.
  • Enfin, envoyez le message via la fonction send_message().
# read the message template
message_template = read_template(‘template.txt’)
with open(“details.csv”, “r”) as csv_file:
 csv_reader = csv.reader(csv_file, delimiter=’,’)
 # skip the first row as it is the header
 next(csv_reader)
 for row in csv_reader:
  msg = MIMEMultipart() # create a message
# add in the actual person name to the message template
  message=
  message_template.substitute(PERSON_NAME=row[0],MATH=row[2],
  ENG=row[3],SCI=row[4])

  # Prints out the message body for our sake
  print(message)
# setup the parameters of the message
  msg[‘From’]=MY_ADDRESS
  msg[‘To’]=lines[1]
  msg[‘Subject’]=”Mid term grades”
# add in the message body
  msg.attach(MIMEText(message, ‘plain’))
# send the message via the server set up earlier.
  s.send_message(msg)
  del msg

# Terminate the SMTP session and close the connection
s.quit()

Voici donc votre code final que vous devez exécuter :

À lire aussi  Pourquoi le langage Python est-il très utile pour les pirates ?

Enfin, n’oubliez pas de fermer la connexion SMTP après avoir envoyé tous les messages. J’espère que vous avez aimé cet article sur la façon d’envoyer des e-mails personnalisés avec Python. N’hésitez pas à poser vos précieuses questions dans la section des commentaires ci-dessous.

import smtplib
import csv
from string import Template
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def read_template(filename):
 with open(filename, ‘r’, encoding=’utf-8') as template_file:
 template_file_content = template_file.read()
 return Template(template_file_content)
def main():
 message_template = read_template(‘template.txt’)
MY_ADDRESS = ‘**********@gmail.com’
 PASSWORD = ‘*************’
# set up the SMTP server
 s = smtplib.SMTP(host=’smtp.gmail.com’, port=587)
 s.starttls()
 s.login(MY_ADDRESS, PASSWORD)
 
 with open(“details.csv”, “r”) as csv_file:
  csv_reader = csv.reader(csv_file, delimiter=’,’)
  # the below statement will skip the first row
  next(csv_reader)
  for lines in csv_reader:
   msg = MIMEMultipart() # create a message
# add in the actual person name to the message template
    message =    message_template.substitute(PERSON_NAME=row[0],MATH=row[2],
    ENG=row[3],SCI=row[4])
   print(message)
# setup the parameters of the message
   msg[‘From’]=MY_ADDRESS
   msg[‘To’]=lines[1]
   msg[‘Subject’]=”Mid term grades”
# add in the message body
   msg.attach(MIMEText(message, ‘plain’))
# send the message via the server set up earlier.
   s.send_message(msg)
   del msg
 
 # Terminate the SMTP session and close the connection
 s.quit()
if __name__ == ‘__main__’:
 main()

Articles similaires

Un commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page