# Von Resend migrieren

> Wechseln Sie von Resend zu Emailit. Die APIs sind sich ähnlich, die Änderungen also klein. Felder, SMTP-Einstellungen und Webhook-Events zuordnen, Signaturen verifizieren und Kontakte umziehen.

Diese Anleitung ordnet Konzepte, API-Aufrufe, Webhooks und Vorlagen von Resend ihren Entsprechungen in Emailit zu. Die beiden APIs sind ähnlich aufgebaut, daher sind die meisten Codeänderungen klein. Lesen Sie zuerst [Zu Emailit migrieren](/de/docs/migrate/) für die allgemeine Reihenfolge und den parallelen Betrieb beider Anbieter.

## Konzepte

| Resend | Emailit |
| --- | --- |
| Team | [Workspace](/de/docs/workspaces/). Jeder Workspace hat eigene Domains, Schlüssel, Mitglieder und Credits. |
| API-Schlüssel mit vollem Zugriff oder Sendezugriff | [API-Schlüssel](/de/docs/developers/api-keys/): **Full Access** oder **Sending Only**, optional auf eine Domain beschränkt |
| Domains | [Versanddomains](/de/docs/domains/) |
| Audiences und Contacts | [Kontakte](/de/docs/contacts/) und [Kontaktlisten](/de/docs/audiences/) |
| Broadcasts | [Kampagnen](/de/docs/campaigns/) |
| Webhooks | [Webhooks](/de/docs/webhooks/) |
| Emails und Logs | **Email API → Emails** und **Email API → Logs** |
| `tags` | `meta` |
| React-Email-Komponenten | HTML, das Sie in Ihrem Code rendern, oder [Vorlagen](/de/docs/templates/), die Sie in der Weboberfläche gestalten |

## API-Aufrufe anpassen

Aus `POST /emails` von Resend wird `POST /v2/emails` von Emailit, mit nahezu denselben Feldern. In Node.js:

```javascript title="Before: Resend"

const resend = new Resend(process.env.RESEND_API_KEY);

await resend.emails.send({
  from: 'Acme <hello@acme.com>',
  to: ['ada@example.com'],
  subject: 'Your receipt',
  html: '<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',
  html: '<p>Thanks for your order.</p>',
});
```

| Resend | Emailit |
| --- | --- |
| `Authorization: Bearer re_…` | `Authorization: Bearer secret_…` |
| `from`, `subject`, `html`, `text`, `headers` | Identisch |
| `to`, `cc`, `bcc` | Identisch, jeweils bis zu 50 |
| `reply_to` (`replyTo` im Node.js-SDK) | `reply_to` |
| `react` (Node.js-SDK) | Nicht verfügbar. Rendern Sie die Komponente zu HTML und übergeben Sie `html`. |
| `attachments[]` mit `filename` und `content` oder `path` | `attachments[]` mit `filename` und Base64-kodiertem `content` oder einer `url`. Mit `content` ist `content_type` erforderlich. |
| `tags: [{ "name": "…", "value": "…" }]` | `meta: { "name": "value" }`, in Webhook-Events zurückgegeben |
| `scheduled_at` | `scheduled_at` (ISO 8601, Unix-Zeit oder englischer Klartext) |
| Header `Idempotency-Key` | Header `Idempotency-Key`, 24 Stunden lang gespeichert |
| `POST /emails/batch` | Nicht verfügbar. Senden Sie eine Anfrage pro Nachricht. |
| Antwort `{ "id": "…" }` | `200` mit `id` (`em_…`), `status: "accepted"` und `ids` mit einer ID pro Empfänger |

Jeder Empfänger in einer Anfrage an Emailit wird zu einer eigenen E-Mail mit eigener ID. Wenn Sie an mehrere Empfänger senden, ordnet `ids` in der Antwort jeder Adresse ihre ID zu. Emailit trackt außerdem Öffnungen und Klicks pro E-Mail mit `tracking: { "loads": true, "clicks": true }`, sobald die Domain eine verifizierte Tracking-Subdomain hat. Siehe [E-Mail senden](/de/docs/email-api/send-email/).

### React Email

Wenn Sie E-Mails mit React Email bauen, behalten Sie Ihre Komponenten und rendern Sie sie vor dem Senden selbst:

```jsx

const html = await render(<Receipt order={order} />);
const text = await render(<Receipt order={order} />, { plainText: true });

await emailit.emails.send({ from, to, subject, html, text });
```

## SMTP-Einstellungen umstellen

| Einstellung | Resend | Emailit |
| --- | --- | --- |
| Host | `smtp.resend.com` | `smtp.emailit.com` |
| Port | `587`, `2587` oder `25` (STARTTLS), `465` oder `2465` (TLS) | `587`, `2587`, `2525` oder `25` (STARTTLS), `465` (TLS) |
| Benutzername | `resend` | `emailit` |
| Passwort | Ihr Resend-API-Schlüssel | Ihr Emailit-API-Schlüssel |

Siehe [SMTP-Einstellungen](/de/docs/smtp/settings/).

## Webhook-Events zuordnen

| Resend-Event | Emailit-Event |
| --- | --- |
| `email.sent` | `email.accepted` (nur API) |
| `email.delivered` | `email.delivered` |
| `email.delivery_delayed` | `email.attempted` |
| `email.bounced` | `email.bounced` |
| `email.complained` | `email.complained` |
| `email.opened` | `email.loaded` |
| `email.clicked` | `email.clicked` |
| `contact.created`, `contact.updated`, `contact.deleted` | Dieselben Namen |
| `domain.created`, `domain.updated`, `domain.deleted` | Dieselben Namen |

Das Anfrageformat ändert sich:

- Resend sendet ein Event pro Anfrage. Emailit sendet ein JSON-Array mit bis zu 100 Events. Iterieren Sie also über den Body.
- Die E-Mail steht in `data.object`. Verwenden Sie `data.object.id`, die `em_`-ID aus der Antwort auf den Versand, statt `data.email_id`. Ihre `meta`-Werte stehen in `data.object.meta`.
- Signaturen funktionieren anders. Resend signiert Webhooks über Svix, mit `svix-*`-Headern. Emailit sendet `X-Emailit-Signature`, den hexadezimal kodierten HMAC-SHA256 von `<timestamp>.<raw body>`, mit dem vollständigen Secret einschließlich des Präfixes `whsec_` als Schlüssel. Eine Svix-Bibliothek zur Verifizierung funktioniert nicht, obwohl beide Secrets mit `whsec_` beginnen. 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 und Kontakte umziehen

1. Sammeln Sie jede Adresse, die während Ihrer Nutzung von Resend gebounct ist oder sich beschwert hat, aus dem Dashboard von Resend oder aus den Events, die Ihre Webhooks gespeichert haben.

2. Erstellen Sie eine CSV-Datei mit den Spalten `email,type,reason`:

```csv
email,type,reason
old-address@example.com,recipient,resend bounce
angry@example.com,recipient,resend complaint
```

   Verwenden Sie den Typ `recipient` für Adressen, die nie E-Mails erhalten dürfen. Er blockiert Versände per API, SMTP und Kampagne.

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.

Wenn Sie Broadcasts senden, exportieren Sie jede Audience von Resend als CSV-Datei und importieren Sie sie unter **Email Marketing → Contacts** mit **Import**, wobei Sie die passende Kontaktliste in Emailit wählen. Ordnen Sie die Spalte für Abmeldungen zu, damit abgemeldete Personen abgemeldet bleiben. Siehe [Kontakte importieren und exportieren](/de/docs/contacts/import-export/).

## Vorlagen umziehen

Wenn Sie E-Mails im Code rendern, mit React Email oder etwas anderem, ändert sich nichts: Senden Sie das HTML. Wenn Sie Vorlagen in Resend pflegen, legen Sie sie unter **Email Marketing → Templates** oder mit der [Vorlagen-API](/de/docs/api-reference/templates/create/) neu an, geben Sie jeder einen Alias und senden Sie sie mit `template` und `variables`.

Vorlagen in Emailit verwenden [Temple](/de/docs/templates/temple/): `{{name}}`, verschachtelte Werte wie `{{user.name}}`, Standardwerte wie `{{name|"there"}}` und `{{#if plan}}…{{else}}…{{/if}}`. Schleifen gibt es nicht, rendern Sie Listen also in Ihrem Code. Temple maskiert HTML nie. Maskieren Sie Benutzereingaben daher, bevor Sie sie übergeben.

## 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 Einträgen von Resend, die typischerweise auf `resend._domainkey` und einer Subdomain `send` liegen. Behalten Sie Ihren DMARC-Eintrag. Entfernen Sie nach der Umstellung die Einträge von Resend. Siehe [DNS-Einträge](/de/docs/domains/dns-records/).

## 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/resend/
