L’envoi manuel d’un grand nombre d’e-mails est une tâche fastidieuse. Vous pouvez utiliser des services tiers pour envoyer les courriels en masse à la fois.
Et si vous créiez votre propre script personnalisé pour envoyer des courriels ?
N’est-ce pas merveilleux ?
Oui, c’est vrai. Nous allons écrire un script en Python pour envoyer des courriels.
Python dispose d’une bibliothèque appelée smtplib qui est utilisée pour envoyer des courriers électroniques. La bibliothèque smtplib
est basée sur le protocole SMTP (Simple Mail Transport Protocol). Le SMTP est utilisé pour envoyer des courriers électroniques à d’autres personnes.
Configuration de Gmail
Ici, nous allons utiliser Gmail comme fournisseur de courrier électronique. Google ne permet pas aux scripts de se connecter. Nous devons donc modifier la sécurité de notre compte Gmail pour permettre aux scripts de se connecter à notre compte Gmail.
Modifier l’option de sécurité de notre compte Gmail n’est pas une bonne chose car cela permet à d’autres personnes d’accéder au compte très facilement. Il est recommandé de créer un nouveau compte Gmail. Allez dans les paramètres et activez l’option Autoriser les applications moins sécurisées : ON .
Si vous ne vous sentez pas à l’aise pour activer le paramètre ci-dessus, vous pouvez utiliser l’API de Google pour vous connecter à votre compte Gmail. Vous trouverez le script permettant d’utiliser les API de Google pour l’authentification ici.
Étapes pour envoyer un courrier
Certaines étapes sont nécessaires pour envoyer un courrier électronique à l’aide de la bibliothèque smtplib . Voyons d’abord les étapes, puis nous écrirons le script.
#1. Connexion au serveur SMTP
Chaque fournisseur de services aura un nom de domaine et un port de serveur SMTP différents. Nous devons utiliser le nom de domaine et le port du serveur SMTP du fournisseur de messagerie que nous allons utiliser dans le script. Le nom de domaine et le port du serveur SMTP de Gmail sont smtp.gmail.com et <em>465</em>
.
Nous utiliserons le cryptage SSL pour la connexion au serveur SMTP car il est plus sûr que le cryptage TSL . Si vous souhaitez utiliser le cryptage TSL , utilisez le port 587
au lieu de 465
. Le nom de domaine du serveur SMTP sera différent selon le fournisseur de services de messagerie.
Le code pour se connecter au serveur SMTP
server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)
#2. Se connecter
Une fois la connexion établie avec le serveur SMTP, nous pouvons nous connecter en utilisant l’adresse électronique et le mot de passe à l’aide de la méthode de l’objet SMTP login
. Le code se présente comme suit.
server.login(sender_email, password)
#3. Envoyez le courrier
Après la connexion, il est impossible d’attendre pour envoyer le courrier. Envoyez le courrier en utilisant la méthode sendmail
. Veillez à envoyer le courrier dans le format suivant.
Subject : your_subject_for \newline mail_content
Les espaces ne sont pas nécessaires. Ils servent uniquement à clarifier le format ci-dessus. Voyons l’exemple de code.
server.sendmail(sender_mail, email, f "Subject : {subject}\n{content}")
#4. Quitter
N’oubliez pas de quitter l’application SMTP c
Nous avons vu les étapes pour envoyer du courrier en utilisant Python. Mais nous n’avons pas abordé le code complet. Passons rapidement en revue le code.
import smtplib, ssl
classe Mail :
def __init__(self) :
self.port = 465
self.smtp_server_domain_name = "smtp.gmail.com"
self.sender_mail = "GMAIL_ADDRESS"
self.password = "SECURE_PASSWORD"
def send(self, emails, subject, content) :
ssl_context = ssl.create_default_context()
service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
service.login(self.sender_mail, self.password)
pour email dans emails :
result = service.sendmail(self.sender_mail, email, f "Subject : {subject}\n{content}")
service.quit()
if __name__ == '__main__' :
mails = input("Enter emails : ").split()
subject = input("Entrez le sujet : ")
content = input("Entrez le contenu : ")
mail = Mail()
mail.send(mails, subject, content)
Nous avons créé une classe appelée Mail. Elle possède une méthode appelée send pour envoyer les messages. C’est à vous de décider si vous voulez écrire une classe ou non. La classe rend le texte plus lisible. Nous avons mis en œuvre toutes les étapes décrites ci-dessus, une par une, dans la méthode d’envoi .
Bravo ! Vous avez envoyé un courrier électronique à l’aide d’un script Python.
Contenu HTML
Que se passe-t-il si vous voulez envoyer le courrier en HTML ? Est-ce possible ?
Oui, pourquoi pas. Nous pouvons envoyer le courrier en utilisant la bibliothèque HTML appelée email.mime
. C’est une bibliothèque intégrée.
Le MIME est un standard utilisé pour étendre le format des emails afin de supporter les programmes d’application, la vidéo, les images, etc..,
Il y a deux classes dont nous avons besoin dans le module email.mime
. Il y a deux classes dont nous avons besoin dans le module email.mime : MIMEText
et MIMEMultipart
. Voyons une brève explication à leur sujet.
#1. MIMEText
La classe MIMEText est utilisée pour écrire le contenu de notre courrier en HTML. Nous allons créer une instance de la classe MIMEText en lui passant le contenu HTML et le type de contenu. Voyez l’exemple de code ci-dessous.
html_content = MIMEText(html_template, 'html')
Certains services de messagerie ne prennent pas en charge le rendu HTML. Il est donc préférable de créer deux instances de la classe MIMEText pour le texte brut et le HTML.
#2. MIMEMultipart
La classe MIMEMultipart est utilisée pour simplifier le formatage et l’écriture du sujet, de l’adresse, à l’adresse etc. Nous allons donner le contenu créé avec la classe MIMEText à MIMEMultipart en utilisant la méthode attach
.
Nous devons nous assurer que l’instance de MIMEMultipart est créée avec l’argument alternatif
pour rendre du texte brut ou du HTML. Envoyons un message avec un contenu HTML.
import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
classe Mail :
def __init__(self) :
...
def send(self, emails) :
ssl_context = ssl.create_default_context()
service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context)
service.login(self.sender_mail, self.password)
pour email dans emails :
mail = MIMEMultipart('alternative')
mail['Subject'] = 'Geekflare Celebrations'
mail['From'] = self.sender_mail
mail['To'] = email
text_template = """
Geekflare
Bonjour {0},
Nous sommes ravis de vous annoncer que notre site web a atteint les 10 millions de vues ce mois-ci.
"""
html_template = """
<h1>Geekflare</h1>
<p>Salut {0},</p> <p>Nous avons le plaisir de vous annoncer que notre site web a atteint 10 millions de vues ce mois-ci.
<p>Nous sommes ravis de vous annoncer que notre site web a atteint <b>10 millions</b> de vues le mois dernier.</p>
"""
html_content = MIMEText(html_template.format(email.split("@")<x>[0]</x>), 'html')
text_content = MIMEText(text_template.format(email.split("@")<x>[0]</x>), 'plain')
mail.attach(text_content)
mail.attach(html_content)
service.sendmail(self.sender_mail, email, mail.as_string())
service.quit()
if __name__ == '__main__' :
mails = input("Enter emails : ").split()
mail = Mail()
mail.send(mails)
Vous pouvez également ajouter une copie carbone aveugle en utilisant l’attribut Bcc
dans l’instance MIMEMultipart.
Ajout de pièces jointes
Les pièces jointes peuvent être des images, des fichiers PDF, des documents, des feuilles, etc. La classe email.mime
comporte un élément appelé MIMEBase . Il existe une classe appelée MIMEBase dans la classe email.mime. Elle est utilisée pour ajouter des pièces jointes au courrier.
Ajoutons une pièce jointe au courrier ci-dessus.
import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
from pathlib import Path
classe Mail :
def __init__(self) :
...
def send(self, emails) :
## login...
for email in emails :
## instance MIMEMultipart
## modèles texte et html
## Instances MIMEText
## attacher des messages à MIMEMultipart
## attacher une pièce jointe
file_path = "Geekflare-logo.png"
mimeBase = MIMEBase("application", "octet-stream")
with open(file_path, "rb") as file :
mimeBase.set_payload(file.read())
encoders.encode_base64(mimeBase)
mimeBase.add_header("Content-Disposition", f "attachment ; filename={Path(file_path).name}")
mail.attach(mimeBase)
## envoi du courrier
service.quit()
if __name__ == '__main__' :
mails = input("Enter emails : ").split()
mail = Mail()
mail.send(mails)
Envoyer des courriers en masse en une seule fois
Nous avons utilisé une boucle pour envoyer le même message à plusieurs membres. C’est un cas (lorsque vous ne voulez pas que les destinataires soient informés de l’existence d’autres destinataires).
Supposons que vous deviez envoyer le même message à 1 000 membres d’un même groupe. Dans ce cas, l’utilisation d’une boucle n’est pas appropriée. Nous pouvons ajouter plusieurs courriels dans le champ To dans la composition générale du courrier. Comment le faire dans un script Python ?
Nous devons combiner la liste des emails sous forme de chaîne de caractères séparée par une virgule et un espace. Nous pouvons utiliser la méthode join string pour combiner tous les emails en une chaîne. Voyez le code pour combiner les courriels en une chaîne.
", ".join(emails)
Remplacez le champ To dans le script ci-dessus par la chaîne ci-dessus. C’est tout, vous avez envoyé le courrier en une seule fois à un grand nombre d’adresses électroniques.
Conclusion
Il existe des bibliothèques tierces pour envoyer des emails en Python. Certaines d’entre elles sont Envelopes, Yagmail, Flanker, etc… Ces bibliothèques nous aident à écrire des scripts avec quelques lignes de code. Vous pouvez également les explorer.
Maintenant, vous pouvez automatiser l’envoi de vos courriels à l’aide de scripts Python. La structure d’envoi des courriels sera différente selon votre cas d’utilisation. Nous avons vu différents scénarios d’envoi d’e-mails. Vous pouvez facilement adapter les scripts présentés dans le tutoriel à votre cas d’utilisation. J’ai pris la référence de cet article.
Bon codage 🙂