# 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](/de/docs/migrate/) für die allgemeine Reihenfolge und den parallelen Betrieb beider Anbieter.

## Konzepte

| Amazon SES | Emailit |
| --- | --- |
| AWS-Konto in einer Region | [Workspace](/de/docs/workspaces/) |
| Verifizierte Identitäten: Domains und E-Mail-Adressen | [Versanddomains](/de/docs/domains/). 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](/de/docs/workspaces/production-access/). Im Sandbox-Modus können Sie an die Kontoadressen von Mitgliedern des Workspace senden. |
| Sendekontingent und maximale Senderate | [Versandlimits](/de/docs/limits/): E-Mails pro Sekunde und pro Tag, zurückgesetzt um Mitternacht UTC |
| IAM-Zugangsdaten und SigV4-Signatur | [API-Schlüssel](/de/docs/developers/api-keys/) in einem Header `Authorization: Bearer` |
| SMTP-Zugangsdaten | Ihr API-Schlüssel, als SMTP-Passwort verwendet |
| Konfigurationssätze und Event-Ziele (SNS, EventBridge, Firehose) | [Webhooks](/de/docs/webhooks/), die signiertes JSON an Ihren HTTPS-Endpunkt senden |
| Sperrliste auf Kontoebene | [Sperrliste](/de/docs/suppressions/) des Workspace |
| E-Mail-Vorlagen | [Vorlagen](/de/docs/templates/) mit Alias und Versionen |
| Empfangsregeln | [Eingehende E-Mails](/de/docs/inbound/) mit dem Webhook `email.received` |
| E-Mail-Tags | `meta` |
| Dedizierte IPs | [Dedizierte IPs](/de/docs/deliverability/dedicated-ips/) auf Anfrage |
| Kontaktlisten | [Kontakte](/de/docs/contacts/), [Kontaktlisten](/de/docs/audiences/) und [Kampagnen](/de/docs/campaigns/) |

## 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](/de/docs/sdks/) für Ihre Sprache. In Node.js:

```javascript title="Before: Amazon SES (AWS SDK v3)"

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>' },
      },
    },
  },
}));
```

```javascript title="After: Emailit"

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](/de/docs/smtp/) 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](/de/docs/email-api/send-email/).

## 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](/de/docs/smtp/settings/).

## 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}`](/de/docs/api-reference/emails/get/) abrufen |

Auch der Payload ändert sich:

- Jede Anfrage von Emailit ist ein JSON-Array mit bis zu 100 Events, mit dem Namen in `type` und der E-Mail in `data.object`.
- Verwenden Sie `data.object.id`, die `em_`-ID aus der Antwort auf den Versand, statt der `messageId` von SES. Ihre `meta`-Werte stehen in `data.object.meta`.
- Statt SNS-Nachrichtensignaturen zu prüfen, verifizieren Sie `X-Emailit-Signature` anhand von `X-Emailit-Timestamp` und Ihrem `whsec_`-Secret. Siehe [Anfragesignatur](/de/docs/webhooks/request-signature/).

```javascript
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

1. 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.

```bash
aws sesv2 list-suppressed-destinations --output json \
  | jq -r '(["email","type","reason"] | @csv),
           (.SuppressedDestinationSummaries[] | [.EmailAddress, "recipient", ("ses " + .Reason)] | @csv)' \
  > suppressions.csv
```

   Das schreibt eine CSV-Datei mit den Spalten `email,type,reason`. Jede Zeile verwendet den Typ `recipient`, der Versände per API, SMTP und Kampagne an die Adresse blockiert.

2. Wenn Sie eine eigene Liste von Bounces und Beschwerden aus SNS-Benachrichtigungen führen, fügen Sie diese Adressen ebenfalls hinzu.

3. Wählen Sie unter **Email API → Suppressions** 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](/de/docs/suppressions/manage/).

## Vorlagen umziehen

Holen Sie jede Vorlage mit `aws sesv2 get-email-template --template-name <name>` ab und importieren Sie dann ihr HTML unter **Email Marketing → Templates** oder erstellen Sie sie mit der [Vorlagen-API](/de/docs/api-reference/templates/create/). 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](/de/docs/templates/temple/).

## DNS ändern

Fügen Sie Ihre Domain unter **Email API → Domains** 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](/de/docs/domains/dns-records/).

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](/de/docs/inbound/set-up/) von Emailit.

## Nächste Schritte

- [Go-live-Checkliste](/de/docs/get-started/go-live/)
- [Webhook einrichten](/de/docs/webhooks/set-up/)
- [Priority migration](/de/docs/programs/priority-migration/): Lassen Sie Engineers von Emailit den Umzug gemeinsam mit Ihnen erledigen

---
Quelle: https://emailit.com/de/docs/migrate/amazon-ses/
