Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En Développement Dernière mise à jour : 25 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

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 🙂 .

  • Hafeezul Kareem Shaik
    Auteur
Merci à nos sponsors
D'autres lectures intéressantes sur le développement
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus