L'envoi manuel d'un grand nombre d'e-mails est une tâche fastidieuse. Vous pouvez utiliser des services tiers pour envoyer des 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 courriels. La bibliothèque smtplib
est basée sur le protocole SMTP (Simple Mail Transport Protocol). Le SMTP est utilisé pour envoyer des courriels à 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 et ensuite nous écrirons le script
#1. Connexion au serveur SMTP
Chaque fournisseur de services aura un nom de domaine et un port différents pour le serveur SMTP. 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 utilisons 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. Connectez-vous
Une fois la connexion établie avec le serveur SMTP, nous pouvons nous connecter en utilisant l'adresse e-mail et le mot de passe avec 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
Objet : votre_objet_pour \nouvelle ligne contenu_du_mail
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. Abandon
N'oubliez pas de quitter le serveur 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
class 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)
for email in 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("Enter subject : ")
content = input("Enter content : ")
mail = Mail()
mail.send(mails, subject, content)
Nous avons créé une classe appelée Courrier. Elle possède une méthode appelée envoyer 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 envoyer
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 appelée email.mime
. Il s'agit d'une bibliothèque intégrée
Le MIME est un standard utilisé pour étendre le format des courriers électroniques 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, de l'adresse à l'adresse, etc. Nous donnerons 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 d'annoncer que notre site web a atteint 10 millions de vues ce mois-ci.
"""
html_template = """
<h1>Geekflare</h1>
<p>Salut {0},</p>
<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. Il existe une instance 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
class 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)
Envoi d'un grand nombre d'emails 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 à 1000 membres du même groupe en même temps. Dans ce cas, l'utilisation d'une boucle n'est pas appropriée. Nous pouvons ajouter plusieurs courriels dans le champ Pour 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 rejoindre 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 Pour dans le script ci-dessus par la chaîne ci-dessus. C'est tout, vous avez envoyé le courrier en une seule fois à bulk mails
Conclusion
Il existe des bibliothèques tierces pour envoyer des courriels en Python. Certaines d'entre elles sont Enveloppes, Yagmail, FlankerCes 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 🙂 .