Amazon SES
Amazon Simple Email Service (SES) ist die günstigste Möglichkeit, große Mengen an Transaktions-E-Mails zu versenden, und die naheliegende Wahl, wenn Sie ohnehin auf AWS arbeiten. Die Einrichtung ist etwas aufwendiger als bei anderen Anbietern – IAM, Region, Verlassen der Sandbox –, danach läuft SES aber sehr zuverlässig.
Wählen Sie SES, wenn Sie tausende E-Mails pro Monat oder mehr versenden, auf den Preis pro Nachricht achten oder alles in Ihrem eigenen AWS-Konto haben möchten. Wenn Sie so schnell wie möglich starten wollen, sind Postmark, Resend oder Mailgun einfacher. Siehe die Übersicht der E-Mail-Dienste.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Ein AWS-Konto mit aktiviertem SES in der Region, aus der Sie senden möchten.
- Eine verifizierte Identität in dieser Region: am besten eine ganze Domain (SES → Identities → Create identity → Domain), mindestens aber die einzelne Absenderadresse.
- Production access (Verlassen der Sandbox), bevor Sie an beliebige Empfänger senden – siehe Sandbox & Limits.
- Ein eigener IAM-Benutzer mit Access Key und nur diesen Berechtigungen:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["ses:SendEmail", "ses:SendRawEmail", "ses:GetAccount"], "Resource": "*" } ]}ses:SendEmail / ses:SendRawEmail werden zum Senden benötigt (Frontmail nutzt die SES-v2-API mit einer Raw-MIME-Nachricht), ses:GetAccount für Verbindung testen und die tägliche Statusprüfung, die auch Ihr Kontingent und den Sandbox-Status ausliest. Sie können Resource auf die ARNs Ihrer Identität und Ihres Configuration Sets einschränken. Verwenden Sie keine Root-Zugangsdaten und keinen Admin-Benutzer.
In Frontmail verbinden
Abschnitt betitelt „In Frontmail verbinden“- Öffnen Sie E-Mail-Dienste → Dienst hinzufügen → Amazon SES.
- Füllen Sie die Felder aus:
| Feld | Wo Sie es finden | Beispiel |
|---|---|---|
| AWS-Region | Die Region, in der Ihre Identität verifiziert ist (oben rechts in der SES-Konsole) | eu-central-1 |
| Access key ID | IAM → Users → frontmail-ses → Security credentials → Create access key | AKIAIOSFODNN7EXAMPLE |
| Secret access key | Wird einmalig beim Erstellen des Access Keys angezeigt | wJalrXUtnFEMI/K7MDENG/… |
| Configuration set | SES → Configuration sets (für Zustellereignisse erforderlich) | frontmail |
| SNS-Topic-ARN | Optional; SNS → Topics – Ereignisse aus anderen Topics werden dann ignoriert | arn:aws:sns:eu-central-1:123456789012:frontmail-events |
| Standard-Absenderadresse | Optional; eine verifizierte Identität in der gewählten Region (eine Adresse auf einer verifizierten Domain oder eine verifizierte Adresse). Wird verwendet, wenn die Vorlage keinen Absender hat | hello@example.com |
| Standard-Absendername | Optional; Anzeigename für den Standardabsender | Acme |
| Max. E-Mails pro Sekunde | Optional; höchstens Ihre maximale SES-Senderate | 14 |
- Klicken Sie auf Prüfen & speichern. Frontmail ruft
GetAccountauf und zeigt an, ob sich das Konto noch in der Sandbox befindet, sowie die maximale Senderate und das 24-Stunden-Kontingent. - Ist die Prüfung erfolgreich, wird der Dienst gespeichert. SES kennt keine „Kontoadresse“ – legen Sie hier also eine Standard-Absenderadresse fest oder in jeder Vorlage einen Absender, sonst schlägt der Versand mit
sender_not_configuredfehl (siehe Standardabsender). Sie können sie später auf der Seite des Dienstes ohne erneute Prüfung ändern. - Der Access Key wird mit AWS KMS per Envelope-Verschlüsselung verschlüsselt; entschlüsselt wird er nur im Versandprozess.
DNS: SPF, DKIM und DMARC
Abschnitt betitelt „DNS: SPF, DKIM und DMARC“Easy DKIM – wenn Sie eine Domain-Identität anlegen, gibt Ihnen SES drei CNAME-Einträge:
abcdef1234._domainkey.example.com. CNAME abcdef1234.dkim.amazonses.com.ghijkl5678._domainkey.example.com. CNAME ghijkl5678.dkim.amazonses.com.mnopqr9012._domainkey.example.com. CNAME mnopqr9012.dkim.amazonses.com.AWS rotiert die dahinterliegenden Schlüssel automatisch. Sobald die Einträge auflösbar sind, zeigt die Identität Verified an.
SPF über eine eigene MAIL-FROM-Domain – standardmäßig ist der Envelope-Absender eine amazonses.com-Adresse; SPF besteht dann zwar, ist aber nicht an Ihre Domain ausgerichtet. Damit auch SPF für DMARC ausgerichtet ist, legen Sie an der Identität eine eigene MAIL FROM fest (z. B. bounce.example.com) und veröffentlichen:
bounce.example.com. MX 10 feedback-smtp.eu-central-1.amazonses.com.bounce.example.com. TXT "v=spf1 include:amazonses.com ~all"(Ersetzen Sie eu-central-1 durch Ihre Region.)
DMARC – beginnen Sie im Überwachungsmodus und verschärfen Sie dann:
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"Regionen
Abschnitt betitelt „Regionen“SES ist regional: Identitäten, Sandbox-Status, Kontingente, Configuration Sets und Suppression Lists gelten jeweils pro Region. Die Region, die Sie in Frontmail wählen, muss diejenige sein,
- in der Ihre Domain oder Adresse verifiziert ist,
- in der Sie Production Access beantragt haben,
- in der Ihr Configuration Set und Ihr SNS-Topic liegen.
Der IAM-Access-Key selbst gilt global; in einer Region, in der nichts eingerichtet ist, schlägt er aber mit „Email address is not verified“ fehl. Für eine Datenhaltung in der EU wählen Sie eine EU-Region wie eu-central-1 (Frankfurt), eu-west-1 (Irland) oder eu-north-1 (Stockholm).
Sandbox & Limits
Abschnitt betitelt „Sandbox & Limits“Jedes neue SES-Konto startet in jeder Region in der Sandbox:
- Sie können nur an verifizierte Adressen oder Domains senden,
- höchstens 200 Nachrichten pro 24 Stunden,
- höchstens 1 Nachricht pro Sekunde.
Beantragen Sie Production Access unter SES → Account dashboard → Request production access. Beschreiben Sie den Anwendungsfall (Transaktions-E-Mails aus einem Webformular über Frontmail), wie Empfänger eingewilligt haben und wie Sie mit Bounces und Beschwerden umgehen. Die Freigabe dauert in der Regel etwa einen Tag.
Nach der Freigabe startet Ihr Kontingent auf einem moderaten Niveau (z. B. 50.000/Tag, 14/s) und wächst mit einer guten Versandhistorie. Die aktuellen Werte zeigt Verbindung testen an; setzen Sie Max. E-Mails pro Sekunde auf höchstens Ihre maximale Senderate.
Webhooks (Zustellverfolgung)
Abschnitt betitelt „Webhooks (Zustellverfolgung)“SES veröffentlicht Ereignisse über Amazon SNS. Frontmail abonniert Ihr SNS-Topic per HTTPS.
-
SNS → Topics → Create topic (Standard), z. B.
frontmail-events, in derselben Region. -
Create subscription → Protokoll HTTPS → Endpoint = die Webhook-URL von der Seite des Dienstes in Frontmail (Kopier-Schaltfläche):
https://api.frontmail.dev/webhooks/providers/ses/<token>Lassen Sie raw message delivery ausgeschaltet. Frontmail prüft die SNS-Signatur und bestätigt das Abonnement automatisch – innerhalb weniger Sekunden wechselt der Status des Abonnements von Pending confirmation zu Confirmed.
-
SES → Configuration sets → Create set (z. B.
frontmail) → Event destinations → Add destination → Ereignistypen auswählen → Ziel Amazon SNS → Ihr Topic. -
Tragen Sie den Namen des Configuration Sets (und optional die Topic-ARN) im Frontmail-Dienst ein und speichern Sie.
| SES-Ereignistyp | Frontmail-Ereignis |
|---|---|
| Deliveries | delivered |
Hard Bounces (Permanent) |
bounced – wird auf die Sperrliste gesetzt |
Soft Bounces (Transient), Zustellverzögerungen |
wird bei der Nachricht protokolliert |
| Complaints | complained – wird auf die Sperrliste gesetzt |
| Opens | opened |
| Clicks | clicked |
| Rejects, Rendering-Fehler | wird bei der Nachricht protokolliert |
Signaturprüfung: Jede SNS-Nachricht ist signiert. Frontmail lädt das Signaturzertifikat nur von sns.<region>.amazonaws.com, prüft die Signatur (SignatureVersion 1 oder 2) und lehnt Nachrichten ab, die älter als eine Stunde sind. Wenn Sie SNS-Topic-ARN festlegen, werden Benachrichtigungen aus allen anderen Topics abgelehnt. Lassen Sie das Feld leer, merkt sich Frontmail das Topic der ersten gültig signierten Nachricht (normalerweise die Bestätigung des Abonnements) und lehnt danach Nachrichten aus jedem anderen Topic ab – eine SNS-Signatur beweist nur, dass irgendein AWS-Konto die Nachricht gesendet hat.
Frontmail fügt jeder E-Mail den Message Tag frontmail_message_id hinzu, damit Ereignisse der Nachricht zugeordnet werden können.
Häufige Fehler
Abschnitt betitelt „Häufige Fehler“- auth – der Dienst funktioniert nicht (ungültiger/gelöschter Access Key, fehlende IAM-Berechtigung, Versand pausiert, Absender nicht verifiziert). Der Dienst wird als
unhealthymarkiert; der Inhaber erhält eine E-Mail und einen Hinweis im Dashboard. Hat die Vorlage einen Ersatzdienst, geht die Nachricht darüber; sonst wird der Credit erstattet und die Nachricht wartet alsheld_service_errorin der Warteschlange zurückgehaltener E-Mails, bis Sie den Dienst reparieren (geprüft beim Speichern und bei der täglichen Statusprüfung) – dann wird sie automatisch gesendet. - permanent – diese Nachricht lässt sich nicht senden (ungültiger oder nicht verifizierter Empfänger, abgelehnter Inhalt). Ersatzdienst, falls eingerichtet, sonst
failedmit Erstattung des Credits. - transient – Drosselung, Timeouts, 5xx. Wiederholung mit exponentiellem Backoff; nach dem letzten Versuch
failedund Erstattung des Credits.
| SES-Fehler | Klasse | Was tun |
|---|---|---|
InvalidClientTokenId / UnrecognizedClientException / SignatureDoesNotMatch |
auth | Access Key ID oder Secret sind falsch oder gelöscht. Erstellen Sie einen neuen Schlüssel für den IAM-Benutzer. |
AccessDeniedException: … not authorized to perform ses:SendRawEmail |
auth | Ergänzen Sie die fehlende Aktion in der IAM-Richtlinie (siehe oben). |
MessageRejected: Email address is not verified … hello@example.com (der Absender) |
auth | Verifizieren Sie die Domain oder die Absenderadresse in der gewählten Region. |
MailFromDomainNotVerifiedException |
auth | Korrigieren Sie die MX-/TXT-Einträge der eigenen MAIL FROM oder entfernen Sie die eigene MAIL FROM. |
SendingPausedException / AccountSuspendedException |
auth | AWS hat den Versand pausiert (oft wegen hoher Bounce- oder Beschwerderate). Prüfen Sie SES → Reputation metrics und die Hinweise von AWS. |
MessageRejected: Email address is not verified … customer@gmail.com (ein Empfänger) |
permanent | Das Konto ist noch in der Sandbox – beantragen Sie Production Access oder verifizieren Sie den Empfänger. |
BadRequestException / ValidationException (ungültige Adresse) |
permanent | Siehe ungültiger Empfänger. |
TooManyRequestsException / Throttling: Maximum sending rate exceeded |
transient | Senken Sie Max. E-Mails pro Sekunde auf Ihre SES-Senderate; beantragen Sie bei AWS ein höheres Kontingent. |
InternalFailure, ServiceUnavailable, Timeouts |
transient | Nichts zu tun – Frontmail wiederholt automatisch. |
Checkliste
Abschnitt betitelt „Checkliste“- Domain-Identität mit Easy DKIM (3 CNAMEs) in der gewählten Region verifiziert
- Eigene MAIL FROM (MX + SPF) und DMARC
p=noneveröffentlicht - Production Access in dieser Region erteilt
- IAM-Benutzer nur mit
ses:SendEmail,ses:SendRawEmail,ses:GetAccount - Verbindung testen erfolgreich und zeigt
sandbox: false - Configuration Set → SNS-Topic → HTTPS-Abonnement auf die Frontmail-Webhook-URL, Status Confirmed
- Name des Configuration Sets in Frontmail eingetragen
- Max. E-Mails pro Sekunde höchstens bei Ihrer SES-Senderate