Zum Inhalt springen
Doku

Leitfaden

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.

Aktualisiert am 1. Okt. 2026

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 für die allgemeine Reihenfolge und den parallelen Betrieb beider Anbieter.

Konzepte

Resend Emailit
Team Workspace. Jeder Workspace hat eigene Domains, Schlüssel, Mitglieder und Credits.
API-Schlüssel mit vollem Zugriff oder Sendezugriff API-Schlüssel: Full Access oder Sending Only, optional auf eine Domain beschränkt
Domains Versanddomains
Audiences und Contacts Kontakte und Kontaktlisten
Broadcasts Kampagnen
Webhooks Webhooks
Emails und Logs Email APIEmails und Email APILogs
tags meta
React-Email-Komponenten HTML, das Sie in Ihrem Code rendern, oder Vorlagen, 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:

Before: Resend
import { Resend } from '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>',
});
After: Emailit
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',
  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.

React Email

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

JSX
import { render } from '@react-email/render';
import Receipt from './emails/receipt';

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.

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

Wenn Sie Broadcasts senden, exportieren Sie jede Audience von Resend als CSV-Datei und importieren Sie sie unter Email MarketingContacts 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.

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 MarketingTemplates oder mit der Vorlagen-API neu an, geben Sie jeder einen Alias und senden Sie sie mit template und variables.

Vorlagen in Emailit verwenden 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 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 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.

Nächste Schritte

War diese Seite hilfreich?

Danke für Ihr Feedback.

Danke, wir lesen jede Nachricht.