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.
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 :
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()
impossible de commencer par le premier il m’indique à chaque fois invalide syntaxe… Pouvez vous m’aider?