Envoyer par SMTP
Avant de vous connecter
Envoyez des e-mails depuis votre application par SMTP avec l’identifiant et le mot de passe de la boîte mail. Les clés API et les jetons de compte ne permettent pas de s’authentifier en SMTP.
Créez une boîte active sur un domaine connecté et terminez la vérification de ses enregistrements DNS. L’identifiant est l’adresse complète, par exemple [email protected]. Utilisez le mot de passe de cette boîte, pas celui du compte de messagerie. Remplacez les adresses des exemples par les vôtres ; le mot de passe est saisi au lancement sans être affiché.
Serveur, ports et chiffrement
Utilisez mail.adapt-mail.com pour tout domaine connecté. Le port 465 active TLS dès la connexion ; le port 587 utilise STARTTLS avant l’authentification. Choisissez une seule option. Gardez la vérification du certificat activée.
Dans ces exemples, l’adresse From et l’expéditeur de l’enveloppe SMTP correspondent à l’identifiant de la boîte. Le nom affiché de l’expéditeur est modifiable. Le port 25 sert aux échanges entre serveurs de messagerie ; utilisez 465 ou 587 pour votre application.
SMTP_HOST = "mail.adapt-mail.com"SMTP_PORT = 465SMTP_USER = "[email protected]"SMTP_PASSWORD = "<mailbox-password>"SMTP_FROM = "[email protected]"SMTP_FROM_NAME = "Example"
465: implicit TLS587: STARTTLSPython : envoyer sur le port 465
Cet exemple utilise uniquement la bibliothèque standard de Python 3. Enregistrez-le dans send_mail.py et lancez python3 send_mail.py. Pour les envois automatiques, récupérez le mot de passe depuis la configuration sécurisée de votre application ; ne le stockez ni dans Git ni dans les journaux.
import smtplibimport sslfrom getpass import getpassfrom email.message import EmailMessagefrom email.utils import formataddr, make_msgid, formatdate
username = "[email protected]"password = getpass("SMTP password: ")recipient = "[email protected]"
message = EmailMessage()message["From"] = formataddr(("Example", username))message["To"] = recipientmessage["Subject"] = "SMTP test"message["Date"] = formatdate(localtime=False, usegmt=True)message["Message-ID"] = make_msgid(domain=username.split("@")[1])message.set_content("Hello! This message was sent through Adapt Mail SMTP.")
with smtplib.SMTP_SSL( "mail.adapt-mail.com", 465, timeout=30, context=ssl.create_default_context(),) as smtp: smtp.login(username, password) refused = smtp.send_message( message, from_addr=username, to_addrs=[recipient], ) print("Rejected recipients:", refused)Python : connexion sur le port 587
Pour STARTTLS, conservez la préparation du message de l’exemple précédent et remplacez le bloc with smtplib.SMTP_SSL par celui-ci. Avec smtplib.SMTP, le mot de passe n’est envoyé qu’après la réussite de STARTTLS.
with smtplib.SMTP("mail.adapt-mail.com", 587, timeout=30) as smtp: smtp.ehlo() smtp.starttls(context=ssl.create_default_context()) smtp.ehlo() smtp.login(username, password) refused = smtp.send_message( message, from_addr=username, to_addrs=[recipient], ) print("Rejected recipients:", refused)HTML et pièces jointes
Ajoutez la version HTML après set_content et la pièce jointe avant l’envoi. Conservez la version texte pour les clients sans prise en charge HTML. Utilisez du HTML de confiance ou échappez les données insérées.
message.add_alternative( "<p>Hello! This message was sent through <strong>Adapt Mail</strong>.</p>", subtype="html",)with open("document.pdf", "rb") as attachment: message.add_attachment( attachment.read(), maintype="application", subtype="pdf", filename="document.pdf", )Résultat, limites et messages envoyés
Un send_message réussi signifie que le serveur SMTP a accepté le message, pas qu’il est arrivé dans la boîte de réception du destinataire. Le dictionnaire refused contient les destinataires refusés ; si tous sont refusés, Python lève SMTPRecipientsRefused.
SMTP et API partagent les limites de chaque boîte : jusqu’à 30 messages sur une fenêtre glissante de 60 secondes, 50 destinataires par message et 1000 destinataires sur 24 heures glissantes, ou 5000 si la limite supérieure est activée. Tous les destinataires To, Cc et Bcc sont comptés.
L’envoi direct par SMTP n’enregistre pas lui-même de copie dans les messages envoyés. Les clients de messagerie le font via IMAP ; l’API Adapt Mail enregistre cette copie séparément.
Erreurs SMTP
535- Échec de l’authentification : vérifiez l’adresse complète, le mot de passe et la disponibilité de la boîte.
451- Échec temporaire, notamment en cas de dépassement des limites d’envoi. Réessayez après un délai.
550 / 5xx- Refus permanent : vérifiez les adresses, les droits de l’expéditeur et le texte de la réponse. Plus de 50 destinataires sont refusés après DATA. Corrigez la cause avant de réessayer.
TLS / timeout- Vérifiez mail.adapt-mail.com, le port, le mode TLS et l’accès sortant du serveur de votre application. Utilisez SMTP_SSL sur 465 ou SMTP avec STARTTLS sur 587.
Lisez la réponse SMTP complète. Réessayez après un délai en cas d’échec temporaire. Si la connexion est interrompue après la transmission et que le résultat est inconnu, ne renvoyez pas aveuglément : SMTP n’a pas d’Idempotency-Key et un nouvel essai peut créer un doublon.