Python

Envoi d'un e-mail en Python

Envoi d'un e-mail en Python
L'envoi d'un e-mail est l'une des tâches les plus courantes que je dois effectuer dans les applications Web et autres projets que je crée. Avec Python, c'est une chose assez simple et facile à faire. Même lorsque nous devons utiliser certains modèles prédéfinis, Python nous aide à remplacer les valeurs d'espace réservé par des données réelles afin que l'e-mail final soit élégant et rempli de détails qui rendent mon client heureux.

Dans cette leçon, je vais partager le script que j'utilise pour envoyer des e-mails aux utilisateurs des applications que je crée et plus encore.

Ce que nous allons faire?

Nous allons créer un programme Python simple qui effectuera les opérations suivantes :

Ces points rendent ce programme beaucoup plus proche d'une utilisation réelle de l'envoi d'e-mails dans vos applications. Commençons.

Fichier pour les e-mails

Le fichier qui contient les e-mails des utilisateurs ressemblera à ceci :

Shubham [email protected]

Ceci est juste un simple fichier texte qui contient le nom et l'email de l'utilisateur séparés par un espace. Plusieurs e-mails ont été placés avec les données de chaque utilisateur dans une nouvelle ligne. Nous avons nommé ce fichier utilisateurs.SMS.

Utilisation du modèle

Définissons également rapidement le modèle que nous utiliserons dans notre script pour remplacer les valeurs :

Bonjour $PERSON_NAME,
Nous avons envoyé cet e-mail à l'aide du module Python smtplib. Cool, d'accord?
Bonne journée à venir!
Acclamations

Nous avons utilisé une chaîne de modèle $PERSON_NAME qui sera remplacé par le nom de la personne que nous recevons des utilisateurs.txt lors de l'envoi de l'e-mail.

Obtenir des données utilisateur à partir d'un fichier

La première étape pour envoyer un e-mail à un utilisateur est d'identifier où nous voulons envoyer les e-mails à. Écrivons une fonction Python qui accepte un nom de fichier et nous renvoie le nom des utilisateurs et les identifiants de messagerie où les e-mails doivent être envoyés :

def get_users_data(file_name):
nom_utilisateur = []
user_email = []
avec open(file_name, mode='r', encoding='utf-8') comme user_file :
pour user_info dans user_file :
Nom d'utilisateur.ajouter(user_info.diviser()[0])
user_email.ajouter(user_info.diviser()[1])
return user_name, user_email

Avec cette fonction, nous renvoyons simplement les noms et e-mails de l'utilisateur que nous recevons du fichier.

Obtention de l'objet modèle

Maintenant, nous pouvons analyser notre modèle et obtenir un objet modèle à partir du fichier texte que nous avons créé :

def read_template(file_name):
avec open(file_name, 'r', encoding='utf-8') comme msg_template :
msg_template_content = msg_template.lis()
modèle de retour (msg_template_content)

Avec cela, nous récupérerons un objet Template que nous pourrons utiliser pour analyser le contenu du fichier et effectuer les remplacements nécessaires pour les chaînes de modèle comme le nom d'un utilisateur.

Comment se fait l'envoi d'e-mails?

Maintenant que nous sommes prêts avec la conception du modèle et les données de l'utilisateur, nous devons comprendre comment un e-mail est réellement envoyé à l'utilisateur :

Configuration de la connexion SMTP

Définissons enfin la fonction qui enverra l'email aux utilisateurs désignés. Voici la fonction :

def principal() :
user_name, user_email = get_users_data('users.txt') # lire les détails de l'utilisateur
message_template = read_template('message.SMS')
# configurer le serveur SMTP
smtplib_server = smtplib.SMTP(hôte='smtp.Gmail.com', port=587)
serveur_smtplib.starttls()
serveur_smtplib.connexion (SEND_FROM, EMAIL_PWD)
# Obtenez les détails de chaque utilisateur et envoyez l'e-mail :
pour le nom, email en zip(user_name, user_email):
multipart_message = MIMEMultipart() # crée un message
# ajouter le nom réel de la personne au modèle de message
msg = message_template.remplacer(PERSON_NAME=nom.Titre())
# Imprime le corps du message pour notre bien
imprimer (msg)
# configurer les paramètres du message
multipart_message['From']=SEND_FROM
multipart_message['À']=e-mail
multipart_message['Subject']="LinuxHint Email"
# ajouter dans le corps du message
multipart_message.attach(MIMEText(msg, 'plain'))
# envoyer le message via le serveur configuré précédemment.
serveur_smtplib.envoyer_message(multipart_message)
del multipart_message
# Terminez la session SMTP et fermez la connexion
serveur_smtplib.quitter()

Dans la fonction ci-dessus, nous avons suivi chaque étape que nous avons indiquée dans la section précédente. Nous avons construit la connexion SMTP et l'avons utilisée pour envoyer l'e-mail.

Programme complet

Dans la dernière section, jetons un coup d'œil au programme complet qui peut être utilisé pour envoyer l'e-mail à l'utilisateur désigné :

importer smtplib
à partir d'un modèle d'importation de chaîne
de l'email.mime.importation multipart MIMEMultipart
de l'email.mime.importation de texte MIMEText
SEND_FROM = 'mon-e-mail-ici'
EMAIL_PWD = 'mon-mot-de-passe-ici'
def get_users_data(file_name):
nom_utilisateur = []
user_email = []
avec open(file_name, mode='r', encoding='utf-8') comme user_file :
pour user_info dans user_file :
Nom d'utilisateur.ajouter(user_info.diviser()[0])
user_email.ajouter(user_info.diviser()[1])
return user_name, user_email
def read_template(file_name):
avec open(file_name, 'r', encoding='utf-8') comme msg_template :
msg_template_content = msg_template.lis()
return Template(msg_template_content)
def principal() :
user_name, user_email = get_users_data('users.txt') # lire les détails de l'utilisateur
message_template = read_template('message.SMS')
# configurer le serveur SMTP
smtplib_server = smtplib.SMTP(hôte='smtp.Gmail.com', port=587)
serveur_smtplib.starttls()
serveur_smtplib.connexion (SEND_FROM, EMAIL_PWD)
# Obtenez les détails de chaque utilisateur et envoyez l'e-mail :
pour le nom, email en zip(user_name, user_email):
multipart_message = MIMEMultipart() # crée un message
# ajouter le nom réel de la personne au modèle de message
msg = message_template.remplacer(PERSON_NAME=nom.Titre())
# Imprime le corps du message pour notre bien
imprimer (msg)
# configurer les paramètres du message
multipart_message['From']=SEND_FROM
multipart_message['À']=e-mail
multipart_message['Subject']="LinuxHint Email"
# ajouter dans le corps du message
multipart_message.attach(MIMEText(msg, 'plain'))
# envoyer le message via le serveur configuré précédemment.
serveur_smtplib.envoyer_message(multipart_message)
del multipart_message
# Terminez la session SMTP et fermez la connexion
serveur_smtplib.quitter()
if __name__ == '__main__' :
principale()

Lorsque nous exécutons ce programme avec un identifiant Gmail, vous pouvez rencontrer un problème comme celui-ci :

Erreur SMTP Gmail


C'est parce que Gmail n'autorise pas les scripts simples à utiliser l'API Gmail. Pour cela, vous devrez peut-être désactiver la connexion de sécurité dans votre compte Gmail. Découvrez comment procéder pour Gmail ici.

Conclusion

Dans cette leçon, nous avons vu comment envoyer des e-mails à l'aide de Python smtplib module.

Comment développer un jeu sur Linux
Il y a dix ans, peu d'utilisateurs de Linux prédisaient que leur système d'exploitation préféré serait un jour une plate-forme de jeu populaire pour l...
Ports Open Source des moteurs de jeux commerciaux
Les récréations de moteur de jeu gratuites, open source et multiplateformes peuvent être utilisées pour jouer à d'anciens ainsi qu'à certains des titr...
Meilleurs jeux de ligne de commande pour Linux
La ligne de commande n'est pas seulement votre plus grand allié lorsque vous utilisez Linux, elle peut également être une source de divertissement car...