Python - Envoyer des Emails

Bonjour à tous, aspirants programmeurs Python !aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde de l'envoi d'emails à l'aide de Python. En tant que votre enseignant en informatique de quartier, je suis ravi de vous guider à travers ce processus. Croquez-moi, à la fin de ce tutoriel, vous enverrez des emails comme un pro !

Python - Sending Email

Envoyer des Emails en Python

Commençons par les bases. Envoyer des emails en Python, c'est comme être un facteur numérique, mais au lieu de marcher de porte en porte, nous utilisons une bibliothèque spéciale de Python appelée smtplib. SMTP signifie Simple Mail Transfer Protocol, ce qui est simplement un moyen élégant de dire "les règles pour envoyer du courrier par internet".

Voici un exemple simple pour commencer :

import smtplib

expediteur_email = "[email protected]"
destinataire_email = "[email protected]"
mot_de_passe = "votre_mot_de_passe"
message = "Bonjour, ceci est un email de test provenant de Python !"

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(expediteur_email, mot_de_passe)
server.sendmail(expediteur_email, destinataire_email, message)

Analysons cela :

  1. Nous importons la bibliothèque smtplib.
  2. Nous configurons notre email expediteur, email destinataire et mot de passe.
  3. Nous créons un message simple.
  4. Nous nous connectons au serveur SMTP de Gmail (plus de détails à ce sujet plus tard).
  5. Nous démarrons TLS pour la sécurité.
  6. Nous nous connectons à notre compte de messagerie.
  7. Enfin, nous envoyons l'email !

Fonction Python smtplib.SMTP()

La fonction SMTP() est comme la clé de notre bureau de poste numérique. Elle établit une connexion au serveur SMTP que nous voulons utiliser. Voici un aperçu plus détaillé :

import smtplib

server = smtplib.SMTP('smtp.gmail.com', 587)
print(server.ehlo())
server.starttls()
print(server.ehlo())

Dans cet exemple :

  • Nous créons un objet SMTP pour le serveur de Gmail.
  • ehlo() est comme dire "bonjour" au serveur.
  • starttls() démarre le cryptage TLS pour la sécurité.

Module Python smtpd

Tandis que smtplib est utilisé pour envoyer des emails, smtpd est utilisé pour les recevoir. C'est comme installer votre propre mini serveur de messagerie ! Voici un exemple simple :

import asyncore
from smtpd import SMTPServer

class EmailServer(SMTPServer):
def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):
print(f'Reception du message de : {peer}')
print(f'Message adressé de : {mailfrom}')
print(f'Message adressé à : {rcpttos}')
print(f'Longueur du message : {len(data)}')

server = EmailServer(('localhost', 1025), None)
asyncore.loop()

Ce code configure un serveur de messagerie de base qui imprime des informations sur les emails reçus. C'est comme avoir votre propre salle de tri de courrier personnel !

Envoyer un Email HTML à l'aide de Python

Maintenant, rendons nos emails plus sophistiqués avec un peu de HTML :

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

expediteur_email = "[email protected]"
destinataire_email = "[email protected]"
mot_de_passe = "votre_mot_de_passe"

message = MIMEMultipart("alternative")
message["Subject"] = "test multipart"
message["From"] = expediteur_email
message["To"] = destinataire_email

text = "Bonjour ! C'est un email en texte brut."
html = """\
<html>
<body>
<p>Bonjour !<br>
C'est un email en <b>HTML</b>.
</p>
</body>
</html>
"""

part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

message.attach(part1)
message.attach(part2)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(expediteur_email, mot_de_passe)
server.sendmail(expediteur_email, destinataire_email, message.as_string())

Cet exemple envoie un email avec à la fois des versions en texte brut et HTML. C'est comme envoyer une lettre avec une enveloppe sophistiquée !

Envoyer des Pièces Jointes par Email

Et si nous voulions envoyer un fichier avec notre email ? Pas de problème ! Voici comment :

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

expediteur_email = "[email protected]"
destinataire_email = "[email protected]"
mot_de_passe = "votre_mot_de_passe"

message = MIMEMultipart()
message["From"] = expediteur_email
message["To"] = destinataire_email
message["Subject"] = "Email avec pièce jointe"

corps = "C'est un email avec une pièce jointe."
message.attach(MIMEText(corps, "plain"))

nom_fichier = "document.pdf"  # Remplacez par votre nom de fichier
piece_jointe = open(nom_fichier, "rb")

part = MIMEBase("application", "octet-stream")
part.set_payload(piece_jointe.read())

encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
f"attachment; filename= {nom_fichier}",
)

message.attach(part)

with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login(expediteur_email, mot_de_passe)
server.sendmail(expediteur_email, destinataire_email, message.as_string())

Ce script attache un fichier à votre email. C'est comme ajouter un colis à votre lettre !

Envoyer des Emails Utilisant le Serveur SMTP de Gmail

Tout au long de ce tutoriel, nous avons utilisé le serveur SMTP de Gmail. Voici un tableau de référence rapide pour les serveurs SMTP courants :

Fournisseur d'Email Serveur SMTP Port
Gmail smtp.gmail.com 587
Outlook smtp-mail.outlook.com 587
Yahoo Mail smtp.mail.yahoo.com 587

N'oubliez pas, lorsque vous utilisez Gmail, vous devrez peut-être activer "Accès aux applications moins sécurisées" ou utiliser un "Mot de passe d'application" si vous avez l'authentification à deux facteurs activée.

Voilà, mes amis ! Vous êtes maintenant équipé pour envoyer des emails comme un pro en Python. Souvenez-vous, avec grand pouvoir vient grande responsabilité - utilisez vos nouvelles compétences en envoi d'emails avec sagesse ! Bon codage, et que vos emails atteignent toujours leur destination !

Credits: Image by storyset