Suche

Kavel durchsuchen...

Dokumentationsmenü

E-Mail

Transaktionale E-Mails über Resend, mit typisierten React-Vorlagen und einer robusten Sende-Warteschlange.

Was du bekommst

  • sendEmail: eine Vorlage rendern und sofort senden
  • enqueueEmail + flushEmailQueue, E-Mails in D1 speichern und aus einem geplanten Worker senden, mit Wiederholungen pro Zeile, damit ein schlechter Empfänger keinen Batch scheitern lässt
  • React-E-Mail-Vorlagen in packages/transactional, während der Entwicklung als Vorschau anzeigbar

Mail senden

ts
import { sendEmail } from "@/lib/email";
import { WelcomeEmail } from "@my-app/transactional/emails/welcome";

await sendEmail(env, {
  to: user.email,
  subject: "Welcome aboard",
  react: WelcomeEmail({ name: user.name }),
});

Die Warteschlange

Alles Nicht-Dringende reihst du ein, statt inline zu senden. Das Rendern passiert beim Einreihen, daher hält die Warteschlange nur fertiges HTML. Ein per Cron ausgelöstes flushEmailQueue leert sie in Batches, markiert jede Zeile als gesendet oder notiert den Fehler und erhöht den Versuchszähler.

Hinweis

Ohne RESEND_API_KEY loggen sowohl sendEmail als auch das Leeren der Warteschlange eine Warnung und überspringen den Versand. So funktionieren Abläufe wie die Auth-Verifizierung lokal, bevor du E-Mail eingerichtet hast.

Einrichtung

bash
# in apps/api/.dev.vars
RESEND_API_KEY=re_...
EMAIL_FROM="My App <noreply@myapp.com>"

Vorlagen während der Entwicklung als Vorschau anzeigen:

bash
cd packages/transactional && bun preview