Versand über SMTP
Voraussetzungen für die Verbindung
Senden Sie E-Mails aus Ihrer Anwendung über SMTP mit dem Benutzernamen und Passwort des Postfachs. API-Schlüssel und Kontotokens eignen sich nicht für SMTP.
Erstellen Sie ein aktives Postfach auf einer verbundenen Domain und schließen Sie die DNS-Prüfung ab. Der Benutzername ist die vollständige Adresse, zum Beispiel [email protected]. Verwenden Sie das Postfachpasswort, nicht das Passwort des E-Mail-Kontos. Ersetzen Sie die Beispieladressen durch Ihre eigenen; das Passwort wird beim Start verdeckt eingegeben.
Server, Ports und Verschlüsselung
Verwenden Sie mail.adapt-mail.com für jede verbundene Domain. Auf Port 465 beginnt TLS sofort; auf Port 587 erfolgt zuerst STARTTLS, dann die Anmeldung. Wählen Sie eine Variante. Lassen Sie die Zertifikatsprüfung aktiviert.
In den Beispielen entsprechen die From-Adresse und der SMTP-Absender dem Benutzernamen des Postfachs. Der angezeigte Absendername ist frei wählbar. Port 25 dient dem Austausch zwischen Mailservern; für Ihre Anwendung verwenden Sie 465 oder 587.
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: Versand über Port 465
Das Beispiel verwendet nur die Standardbibliothek von Python 3. Speichern Sie es als send_mail.py und starten Sie python3 send_mail.py. Für den automatischen Versand beziehen Sie das Passwort aus der geschützten Konfiguration Ihrer Anwendung; speichern Sie es nicht in Git oder Protokollen.
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: Verbindung über Port 587
Für STARTTLS übernehmen Sie die Nachrichtenvorbereitung aus dem vorherigen Beispiel und ersetzen den Block with smtplib.SMTP_SSL durch den folgenden. Bei smtplib.SMTP wird das Passwort erst nach erfolgreichem STARTTLS übertragen.
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 und Anhänge
Fügen Sie die HTML-Version nach set_content und den Anhang vor dem Versand hinzu. Behalten Sie die Textversion für Clients ohne HTML-Unterstützung bei. Verwenden Sie nur vertrauenswürdiges HTML oder maskieren Sie eingefügte Daten.
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", )Ergebnis, Limits und gesendete Nachrichten
Ein erfolgreiches send_message bedeutet, dass der SMTP-Server die Nachricht angenommen hat, nicht dass sie im Posteingang angekommen ist. Das Dictionary refused enthält abgelehnte Empfänger; werden alle Empfänger abgelehnt, löst Python SMTPRecipientsRefused aus.
SMTP und API teilen sich die Limits pro Postfach: bis zu 30 Nachrichten in einem gleitenden 60-Sekunden-Fenster, 50 Empfänger pro Nachricht und 1000 Empfänger in einem gleitenden 24-Stunden-Fenster; mit aktiviertem erhöhtem Limit sind es 5000. Alle Empfänger in To, Cc und Bcc zählen mit.
Direkter SMTP-Versand speichert nicht automatisch eine Kopie unter „Gesendet“. Mailprogramme erledigen dies über IMAP; beim Versand über die Adapt Mail API wird die Kopie separat gespeichert.
SMTP-Fehler
535- Anmeldung fehlgeschlagen: Prüfen Sie die vollständige Adresse, das Postfachpasswort und die Verfügbarkeit des Postfachs.
451- Vorübergehender Fehler, auch bei überschrittenen Versandlimits. Versuchen Sie es nach einer Wartezeit erneut.
550 / 5xx- Dauerhafte Ablehnung: Prüfen Sie Adressen, Absenderberechtigungen und Antworttext. Mehr als 50 Empfänger werden nach DATA abgelehnt. Beheben Sie die Ursache vor einem erneuten Versuch.
TLS / timeout- Prüfen Sie mail.adapt-mail.com, Port, TLS-Modus und ausgehende Verbindungen vom Anwendungsserver. Verwenden Sie SMTP_SSL auf 465 oder SMTP mit STARTTLS auf 587.
Lesen Sie die vollständige SMTP-Antwort. Wiederholen Sie vorübergehend fehlgeschlagene Versuche mit Verzögerung. Bricht die Verbindung nach der Übertragung ab und ist das Ergebnis unbekannt, senden Sie nicht blind erneut: SMTP hat keinen Idempotency-Key, und ein erneuter Versuch kann ein Duplikat erzeugen.