Automatiser l’envoi d’emails avec Python

L’automatisation de l’envoi d’e-mails avec Python est une tâche courante et utile pour des scénarios tels que l’envoi de notifications, de rapports automatisés ou de messages de bienvenue. Cela peut être facilement réalisé en utilisant des bibliothèques Python comme smtplib pour l’envoi d’e-mails et email pour la création et la gestion des messages. Voici un guide détaillé pour automatiser l’envoi d’e-mails avec Python.

Étape 1 : Préparer votre environnement

  1. Installer Python : Si vous n’avez pas déjà Python installé, vous pouvez le télécharger depuis le site officiel python.org.
  2. Accéder à un serveur SMTP : Vous aurez besoin d’un serveur SMTP pour envoyer des e-mails. Des services populaires comme Gmail, Outlook ou Yahoo offrent des serveurs SMTP gratuits, mais vous devrez peut-être activer certaines options, comme l’accès aux applications moins sécurisées (dans le cas de Gmail).

Étape 2 : Configurer un compte email (par exemple, Gmail)

  1. Obtenir un mot de passe d’application (Gmail) : Si vous utilisez Gmail et que l’authentification à deux facteurs est activée, vous devez générer un mot de passe d’application pour l’utiliser dans le script Python. Vous pouvez le faire en suivant ces étapes :
    • Allez sur Google Account Security.
    • Sous « Méthodes de connexion à Google », sélectionnez « Mots de passe d’application ».
    • Générez un mot de passe d’application pour l’utiliser dans votre script.
  2. Paramètres du serveur SMTP de Gmail :
    • Serveur SMTP : smtp.gmail.com
    • Port SMTP : 587 (pour TLS)
    • Utilisateur : Votre adresse e-mail (par exemple, votre_email@gmail.com)
    • Mot de passe : Le mot de passe de votre application (pas votre mot de passe principal)

Étape 3 : Code Python pour envoyer un e-mail

Le module smtplib de Python permet de se connecter à un serveur SMTP et d’envoyer des e-mails. Le module email permet de construire des messages e-mail avec différents types de contenu (texte, HTML, pièces jointes).

Exemple de script pour envoyer un e-mail avec Gmail :

pythonCopierModifierimport smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

# Paramètres du serveur SMTP (ici Gmail)
smtp_server = 'smtp.gmail.com'
smtp_port = 587
email_user = 'votre_email@gmail.com'  # Remplacez par votre email
email_password = 'votre_mot_de_passe_application'  # Remplacez par le mot de passe d'application

# Détails de l'e-mail
from_email = email_user
to_email = 'destinataire@example.com'  # Remplacez par l'adresse e-mail du destinataire
subject = 'Sujet de l\'e-mail'
body = 'Ceci est le contenu de l\'e-mail.'

# Créer le message e-mail
msg = MIMEMultipart()
msg['From'] = from_email
msg['To'] = to_email
msg['Subject'] = subject

# Ajouter le corps du message
msg.attach(MIMEText(body, 'plain'))

# Envoyer l'e-mail
try:
    # Connexion au serveur SMTP
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()  # Sécuriser la connexion
    server.login(email_user, email_password)
    
    # Envoyer l'e-mail
    text = msg.as_string()
    server.sendmail(from_email, to_email, text)
    print('E-mail envoyé avec succès!')
    
except Exception as e:
    print(f"Une erreur est survenue: {e}")
    
finally:
    server.quit()  # Déconnexion du serveur SMTP

Explication du code :

  • Connexion au serveur SMTP : Le script se connecte au serveur SMTP de Gmail (smtp.gmail.com), puis utilise la méthode starttls() pour sécuriser la connexion.
  • Authentification : Le script s’authentifie avec votre adresse e-mail et votre mot de passe d’application.
  • Création du message : Un e-mail MIME multipart est créé, permettant d’inclure différents types de contenu (texte, HTML, images).
  • Envoi de l’e-mail : Une fois le message créé, il est envoyé via server.sendmail().

Étape 4 : Ajouter des fonctionnalités avancées

a. Envoyer un e-mail HTML

Si vous souhaitez envoyer un e-mail avec du contenu HTML, vous pouvez modifier le type de contenu du message comme suit :

pythonCopierModifier# Créer un e-mail HTML
html_body = '''
<html>
  <body>
    <h1>Bonjour!</h1>
    <p>Ceci est un e-mail avec du <strong>HTML</strong>.</p>
  </body>
</html>
'''

msg.attach(MIMEText(html_body, 'html'))

b. Ajouter des pièces jointes

Pour ajouter une pièce jointe (comme un fichier PDF ou une image), vous pouvez utiliser le code suivant :

pythonCopierModifier# Ajouter une image en pièce jointe
with open("image.jpg", "rb") as attachment:
    img = MIMEImage(attachment.read())
    msg.attach(img)

Ou pour un fichier PDF :

pythonCopierModifierfrom email.mime.base import MIMEBase
from email import encoders

# Ajouter un fichier PDF en pièce jointe
filename = "document.pdf"
with open(filename, "rb") as attachment:
    part = MIMEBase("application", "octet-stream")
    part.set_payload(attachment.read())
    encoders.encode_base64(part)
    part.add_header(
        "Content-Disposition",
        f"attachment; filename={filename}",
    )
    msg.attach(part)

c. Envoyer à plusieurs destinataires

Pour envoyer un e-mail à plusieurs destinataires, vous pouvez utiliser une liste d’adresses et joindre cette liste à l’en-tête To :

pythonCopierModifierto_emails = ['destinataire1@example.com', 'destinataire2@example.com']

msg['To'] = ", ".join(to_emails)
server.sendmail(from_email, to_emails, text)

Étape 5 : Automatiser l’envoi d’e-mails

Pour automatiser l’envoi d’e-mails à intervalles réguliers, vous pouvez utiliser des outils comme cron (sur Linux/macOS) ou Task Scheduler (sur Windows). Vous pouvez aussi créer un script Python qui s’exécute à intervalles réguliers avec des bibliothèques comme schedule.

Exemple d’automatisation avec schedule :

pythonCopierModifierimport schedule
import time

# Fonction d'envoi d'e-mail
def send_email():
    # Code d'envoi d'e-mail ici (comme montré ci-dessus)
    print("Envoi d'un e-mail...")

# Planifier l'envoi d'e-mails toutes les heures
schedule.every(1).hours.do(send_email)

while True:
    schedule.run_pending()
    time.sleep(60)  # Attendre une minute avant de vérifier à nouveau

Ce script enverra un e-mail toutes les heures. Vous pouvez ajuster la fréquence selon vos besoins (minutes, jours, etc.).


Conclusion

L’automatisation de l’envoi d’e-mails avec Python est simple et flexible. Vous pouvez l’utiliser pour envoyer des notifications, des rapports ou des messages programmés. En utilisant smtplib, vous pouvez connecter votre application à un serveur SMTP comme Gmail et envoyer des e-mails en utilisant des fonctionnalités avancées comme les pièces jointes et le contenu HTML. N’oubliez pas de respecter les bonnes pratiques en matière de sécurité et de confidentialité lorsque vous utilisez des informations sensibles dans vos scripts.

carle
carle