Rechercher

Rechercher dans Kavel...

Menu de documentation

E-mail

E-mails transactionnels via Resend, avec des modèles React typés et une file d'envoi durable.

Ce que vous obtenez

  • sendEmail: rendre un modèle et l'envoyer immédiatement
  • enqueueEmail + flushEmailQueue, stocker les e-mails dans D1 et les envoyer depuis un Worker planifié, avec des relances par ligne pour qu'un mauvais destinataire ne fasse pas échouer un lot
  • Modèles d'e-mail React dans packages/transactional, prévisualisables pendant le développement

Envoyer un e-mail

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

La file d'attente

Pour tout ce qui n'est pas urgent, mettez en file plutôt que d'envoyer en ligne. Le rendu a lieu à la mise en file, donc la file ne contient que du HTML fini. Un flushEmailQueue déclenché par cron la vide par lots, marquant chaque ligne comme envoyée ou enregistrant l'erreur et incrémentant son nombre de tentatives.

Remarque

Sans RESEND_API_KEY, sendEmail et le vidage de la file journalisent un avertissement et n'envoient rien. Ainsi, des flux comme la vérification d'authentification fonctionnent en local avant que vous ayez configuré l'e-mail.

Installation

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

Prévisualisez les modèles pendant le développement :

bash
cd packages/transactional && bun preview