Leitfaden
Von Amazon SES migrieren
Wechseln Sie von Amazon SES zu Emailit. Identitäten, Sandbox und Kontingente zuordnen, SDK-Aufrufe und SMTP-Zugangsdaten ersetzen und SNS-Events in signierte Webhooks umwandeln.
Diese Anleitung ordnet Konzepte, API-Aufrufe, Event-Benachrichtigungen, Sperrungen und Vorlagen von Amazon SES ihren Entsprechungen in Emailit zu. Lesen Sie zuerst Zu Emailit migrieren für die allgemeine Reihenfolge und den parallelen Betrieb beider Anbieter.
Konzepte
| Amazon SES | Emailit |
|---|---|
| AWS-Konto in einer Region | Workspace |
| Verifizierte Identitäten: Domains und E-Mail-Adressen | Versanddomains. Identitäten für einzelne E-Mail-Adressen gibt es nicht. |
| Easy-DKIM-CNAME-Einträge | Ein DKIM-TXT-Eintrag, emailit._domainkey |
| Eigene MAIL-FROM-Domain | Der Return-Path emailit.<your domain>, den jede Domain hat |
| Sandbox und Antrag auf Produktionszugang | Sandbox-Modus und Produktionszugang. Im Sandbox-Modus können Sie an die Kontoadressen von Mitgliedern des Workspace senden. |
| Sendekontingent und maximale Senderate | Versandlimits: E-Mails pro Sekunde und pro Tag, zurückgesetzt um Mitternacht UTC |
| IAM-Zugangsdaten und SigV4-Signatur | API-Schlüssel in einem Header Authorization: Bearer |
| SMTP-Zugangsdaten | Ihr API-Schlüssel, als SMTP-Passwort verwendet |
| Konfigurationssätze und Event-Ziele (SNS, EventBridge, Firehose) | Webhooks, die signiertes JSON an Ihren HTTPS-Endpunkt senden |
| Sperrliste auf Kontoebene | Sperrliste des Workspace |
| E-Mail-Vorlagen | Vorlagen mit Alias und Versionen |
| Empfangsregeln | Eingehende E-Mails mit dem Webhook email.received |
| E-Mail-Tags | meta |
| Dedizierte IPs | Dedizierte IPs auf Anfrage |
| Kontaktlisten | Kontakte, Kontaktlisten und Kampagnen |
API-Aufrufe anpassen
SES-Aufrufe werden mit Ihren AWS-Zugangsdaten signiert, daher erfolgen sie meist über ein AWS-SDK. Bei Emailit senden Sie eine JSON-Anfrage mit einem API-Schlüssel oder nutzen das Emailit-SDK für Ihre Sprache. In Node.js:
import { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2';
const ses = new SESv2Client({ region: 'eu-west-1' });
await ses.send(new SendEmailCommand({
FromEmailAddress: 'Acme <hello@acme.com>',
Destination: { ToAddresses: ['ada@example.com'] },
Content: {
Simple: {
Subject: { Data: 'Your receipt' },
Body: {
Text: { Data: 'Thanks for your order.' },
Html: { Data: '<p>Thanks for your order.</p>' },
},
},
},
}));import { Emailit } from '@emailit/node';
const emailit = new Emailit(process.env.EMAILIT_API_KEY);
await emailit.emails.send({
from: 'Acme <hello@acme.com>',
to: 'ada@example.com',
subject: 'Your receipt',
text: 'Thanks for your order.',
html: '<p>Thanks for your order.</p>',
});Amazon SES (API v2 SendEmail) |
Emailit (POST /v2/emails) |
|---|---|
| AWS-Zugangsdaten und SigV4-Signatur | Authorization: Bearer secret_… |
FromEmailAddress |
from |
Destination.ToAddresses, CcAddresses, BccAddresses |
to, cc, bcc, jeweils bis zu 50 |
ReplyToAddresses |
reply_to |
Content.Simple.Subject.Data |
subject |
Content.Simple.Body.Html.Data, Text.Data |
html, text |
Content.Template.TemplateName |
template, ein Alias oder eine ID |
Content.Template.TemplateData (ein JSON-String) |
variables (ein JSON-Objekt) |
Content.Raw (eine vollständige MIME-Nachricht) |
Senden Sie die MIME-Nachricht über das SMTP-Relay oder bauen Sie sie mit html, text und attachments neu auf |
EmailTags |
meta, in Webhook-Events zurückgegeben |
ConfigurationSetName |
Nicht nötig. Events gehen an Ihre Webhooks, und Tracking wird pro Domain oder pro E-Mail mit tracking festgelegt. |
Antwort MessageId |
200 mit id (em_…), message_id, status: "accepted" und ids pro Empfänger |
Emailit unterstützt außerdem Planung mit scheduled_at und sichere Wiederholungen mit einem Header Idempotency-Key, was SES beim Senden nicht bietet. Siehe E-Mail senden.
SMTP-Einstellungen umstellen
| Einstellung | Amazon SES | Emailit |
|---|---|---|
| Host | email-smtp.<region>.amazonaws.com |
smtp.emailit.com |
| Port | 587, 2587 oder 25 (STARTTLS), 465 oder 2465 (TLS) |
587, 2587, 2525 oder 25 (STARTTLS), 465 (TLS) |
| Benutzername | Ihr SES-SMTP-Benutzername | emailit |
| Passwort | Ihr SES-SMTP-Passwort | Ihr Emailit-API-Schlüssel |
Emailit liest keine SES-Header wie X-SES-CONFIGURATION-SET. Entfernen Sie sie. Siehe SMTP-Einstellungen.
Event-Benachrichtigungen zuordnen
SES veröffentlicht Events über Konfigurationssätze an SNS, EventBridge oder Firehose. Emailit sendet sie als Webhooks direkt an Ihren HTTPS-Endpunkt, es gibt also kein Topic zu abonnieren oder zu bestätigen.
| SES-Event-Typ | Emailit-Event |
|---|---|
Send |
email.accepted (nur API) |
Delivery |
email.delivered |
DeliveryDelay |
email.attempted |
Bounce mit bounceType Permanent |
email.bounced |
Bounce mit bounceType Transient |
email.attempted, während Emailit es erneut versucht, dann email.bounced, wenn alle Wiederholungen fehlschlagen |
Complaint |
email.complained |
Open |
email.loaded |
Click |
email.clicked |
Subscription |
email.unsubscribed, nur für Kampagnen-E-Mails |
Reject, Rendering Failure |
Keine direkte Entsprechung. Fehler in der Anfrage, etwa eine fehlende Vorlage, gibt die API sofort zurück, und Nachrichten, die Emailit nicht zustellt, erhalten den Status held. |
| Empfangsregel mit einer SNS- oder Lambda-Aktion | email.received, dann den Inhalt mit GET /emails/{id} abrufen |
Auch der Payload ändert sich:
- Jede Anfrage von Emailit ist ein JSON-Array mit bis zu 100 Events, mit dem Namen in
typeund der E-Mail indata.object. - Verwenden Sie
data.object.id, dieem_-ID aus der Antwort auf den Versand, statt dermessageIdvon SES. Ihremeta-Werte stehen indata.object.meta. - Statt SNS-Nachrichtensignaturen zu prüfen, verifizieren Sie
X-Emailit-Signatureanhand vonX-Emailit-Timestampund Ihremwhsec_-Secret. Siehe Anfragesignatur.
for (const event of req.body) {
const email = event.data.object;
if (event.type === 'email.bounced') markBounced(email.to, email.id);
if (event.type === 'email.complained') unsubscribe(email.to);
}Sperrungen umziehen
-
Exportieren Sie die Sperrliste auf Kontoebene von SES mit der AWS CLI. Enthält die Ausgabe ein
NextToken, wiederholen Sie den Befehl mit--next-token, bis Sie alle Seiten haben.aws sesv2 list-suppressed-destinations --output json \ | jq -r '(["email","type","reason"] | @csv), (.SuppressedDestinationSummaries[] | [.EmailAddress, "recipient", ("ses " + .Reason)] | @csv)' \ > suppressions.csvDas schreibt eine CSV-Datei mit den Spalten
email,type,reason. Jede Zeile verwendet den Typrecipient, der Versände per API, SMTP und Kampagne an die Adresse blockiert. -
Wenn Sie eine eigene Liste von Bounces und Beschwerden aus SNS-Benachrichtigungen führen, fügen Sie diese Adressen ebenfalls hinzu.
-
Wählen Sie unter Email APISuppressions die Option Import und laden Sie die Datei hoch. Jede Datei darf bis zu 10.000 Zeilen haben und höchstens 8 MB groß sein. Duplikate werden übersprungen.
Siehe Sperrungen verwalten.
Vorlagen umziehen
Holen Sie jede Vorlage mit aws sesv2 get-email-template --template-name <name> ab und importieren Sie dann ihr HTML unter Email MarketingTemplates oder erstellen Sie sie mit der Vorlagen-API. Verwenden Sie den SES-Vorlagennamen als Alias in Emailit, sofern er dem Alias-Format aus Kleinbuchstaben, Ziffern, - und _ entspricht.
SES-Vorlagen verwenden Tags im Handlebars-Stil. Temple deckt die üblichen Teile ab:
| Amazon SES | Emailit (Temple) |
|---|---|
{{name}}, {{user.name}} |
Identisch |
{{#if plan}}…{{else}}…{{/if}} |
Identisch |
{{#each items}}…{{/each}} |
Nicht unterstützt. Rendern Sie die Liste in Ihrem Code und übergeben Sie sie als eine Variable. |
TemplateData als JSON-String |
variables als JSON-Objekt |
| Kein eingebauter Standardwert | {{name|"there"}} fügt einen Ersatzwert hinzu |
Temple maskiert HTML nie. Maskieren Sie Benutzereingaben daher, bevor Sie sie übergeben. Siehe Temple.
DNS ändern
Fügen Sie Ihre Domain unter Email APIDomains hinzu und legen Sie die Einträge von Emailit an. Sie verwenden eigene Namen (emailit._domainkey, emailit.<domain> und optional go und inbound) und kollidieren daher nicht mit den Easy-DKIM-CNAMEs von SES oder einer eigenen MAIL-FROM-Subdomain. Behalten Sie Ihren DMARC-Eintrag. Siehe DNS-Einträge.
Entfernen Sie nach der Umstellung die DKIM-CNAMEs von SES und die Einträge der eigenen MAIL-FROM-Domain und löschen Sie die Identitäten in SES. Wenn Sie E-Mails mit SES-Empfangsregeln empfangen, verlagern Sie das zuerst auf eine Inbound-Subdomain von Emailit.
Nächste Schritte
- Go-live-Checkliste
- Webhook einrichten
- Priority migration: Lassen Sie Engineers von Emailit den Umzug gemeinsam mit Ihnen erledigen