Zum Inhalt springen
Deutsch

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 = 465
SMTP_USER = "[email protected]"
SMTP_PASSWORD = "<mailbox-password>"
SMTP_FROM = "[email protected]"
SMTP_FROM_NAME = "Example"
465: implicit TLS
587: STARTTLS

Python: 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 smtplib
import ssl
from getpass import getpass
from email.message import EmailMessage
from 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"] = recipient
message["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.