Buscar

Buscar en Kavel...

Menú de documentación

Correo

Correo transaccional vía Resend, con plantillas React tipadas y una cola de envío duradera.

Qué obtienes

  • sendEmail: renderiza una plantilla y envíala de inmediato
  • enqueueEmail + flushEmailQueue, guarda correos en D1 y envíalos desde un Worker programado, con reintentos por fila para que un destinatario incorrecto no haga fallar un lote
  • Plantillas de correo React en packages/transactional, con vista previa durante el desarrollo

Enviar correo

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 cola

Para todo lo que no sea urgente, encola en lugar de enviar en línea. El renderizado ocurre al encolar, así que la cola solo contiene HTML terminado. Un flushEmailQueue activado por cron la vacía por lotes, marcando cada fila como enviada o registrando el error e incrementando su número de intentos.

Nota

Sin RESEND_API_KEY, tanto sendEmail como el vaciado de la cola registran una advertencia y omiten el envío. Así, flujos como la verificación de autenticación funcionan en local antes de que hayas configurado el correo.

Configuración

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

Previsualiza plantillas mientras desarrollas:

bash
cd packages/transactional && bun preview