Email

Envoyer des e-mails avec Python

Python peut envoyer des e-mails sans rien installer. La bibliothèque standard fournit smtplib pour la connexion SMTP et email.message.EmailMessage pour construire le message, si bien qu'un script fonctionnel fait environ quinze lignes. Voici ce script avec TLS fait correctement, puis les raisons de passer à une HTTP API quand le trafic réel arrive.

Comment envoyer un e-mail avec la bibliothèque standard ?

EmailMessage construit le message et définit les en-têtes pour vous. smtplib.SMTP_SSL ouvre une connexion chiffrée sur le port 465 :

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg["From"] = "you@yourdomain.com"
msg["To"] = "recipient@example.org"
msg["Subject"] = "Your receipt"
msg.set_content("Thanks for your order. This is the plain-text version.")
msg.add_alternative("<p>Thanks for your order.</p>", subtype="html")

with smtplib.SMTP_SSL("smtp.example.com", 465) as server:
    server.login("smtp-user", "smtp-password")
    server.send_message(msg)

set_content écrit le corps en texte brut et add_alternative attache la version HTML, pour que les clients affichent ce qu'ils savent rendre. Envoyer les deux parties est une bonne pratique et aide à la délivrabilité.

SSL ou STARTTLS ?

Deux chemins de chiffrement existent et ils utilisent des ports différents. SMTP_SSL sur le port 465 négocie TLS dès le premier octet. L'alternative est SMTP en clair sur le port 587, suivi de starttls(), qui passe la connexion en mode chiffré :

with smtplib.SMTP("smtp.example.com", 587) as server:
    server.starttls()
    server.login("smtp-user", "smtp-password")
    server.send_message(msg)

Choisissez en fonction de ce que votre serveur de messagerie prend en charge. N'envoyez jamais d'identifiants sur une connexion non chiffrée. Conservez le nom d'utilisateur et le mot de passe dans des variables d'environnement, lues avec os.environ, pas en dur dans le code.

Comment ajouter une pièce jointe ?

add_attachment prend les octets plus un type MIME. Lisez le fichier en mode binaire :

with open("invoice.pdf", "rb") as f:
    msg.add_attachment(
        f.read(),
        maintype="application",
        subtype="pdf",
        filename="invoice-1042.pdf",
    )

Pourquoi abandonner SMTP brut en production ?

Le script fonctionne, mais la production ajoute des problèmes que la bibliothèque standard ne résout pas. Vous avez besoin d'un serveur de messagerie avec une bonne réputation IP, des enregistrements SPF, DKIM et DMARC corrects, une logique de réessai pour les erreurs transitoires, et un moyen de voir les rebonds et les plaintes. Une HTTP API intègre tout cela. Vous vous authentifiez avec une clé, envoyez du JSON et lisez des réponses structurées au lieu d'analyser des codes de statut SMTP.

Envoyer avec Bird

Le Bird Python SDK envoie le même message sans la plomberie SMTP :

import bird

client = bird.Bird(api_key=os.environ["BIRD_API_KEY"])

data, error = client.emails.send(
    from_="you@yourdomain.com",
    to="delivered@bird.dev",
    subject="Hello from Python",
    html="<p>It works.</p>",
)

L'adresse sandbox delivered@bird.dev accepte toujours les e-mails, donc la première exécution confirme votre clé et votre payload avant de viser de vrais destinataires. SDK renvoie une paire (data, error), ce qui rend la gestion des erreurs explicite au lieu d'intercepter des exceptions SMTP. Si PHP est davantage votre langage, le guide PHPMailer couvre l'équivalent dans cet écosystème.

FAQ

Dois-je installer quelque chose pour envoyer des e-mails en Python ?

Non. smtplib et email.message font partie de la bibliothèque standard, donc un envoi SMTP basique ne nécessite aucun paquet. Vous n'ajoutez une dépendance que si vous voulez un client de plus haut niveau ou une HTTP API.

Quelle est la différence entre le port 465 et le port 587 ?

Le port 465 attend TLS dès le départ, ce que smtplib.SMTP_SSL gère. Le port 587 démarre en clair et passe en chiffré avec starttls(). Les deux aboutissent à une connexion chiffrée ; ils négocient simplement à des moments différents.

Quand passer de smtplib à une API ?

Quand la délivrabilité, les réessais et le suivi des événements comptent. La bibliothèque standard envoie un message ; elle ne gère pas la réputation et ne rapporte pas ce qui se passe après la remise. Une API comme Bird email couvre cette couche.

Pour la forme complète de la requête et de la réponse, le guide d'envoi d'e-mails détaille API de bout en bout.

Développez sur le même réseau.

Une clé API de test est disponible immédiatement. La production est activée dès que vous ajoutez un moyen de paiement et vérifiez un expéditeur.

Votre prochaine idée.
Prête à se connecter.