Documentación

Email (Resend)

Correo transaccional con Resend — verificación, restablecimiento de contraseña, plantillas y cómo añadir nuevos emails.

Abrir enChatGPT (se abre en una pestaña nueva)Claude (se abre en una pestaña nueva)Cursor (se abre en una pestaña nueva)Correo transaccional con Resend — verificación, restablecimiento de contraseña, plantillas y cómo añadir nuevos emails.

Motoko Base envía emails de auth y cuenta a través de Resend. Esto es solo email transaccional — no marketing.

Official docs: Resend documentation

Setup

  1. Crea una cuenta en Resend
  2. Crea una API key (permiso de envío)
  3. Añade y verifica tu dominio de envío (SPF/DKIM) — o usa onboarding@resend.dev para pruebas locales
  4. Define las env vars:
VariablePurpose
RESEND_API_KEYServer-only API key
EMAIL_FROMSender, e.g. My App <noreply@yourdomain.com>

Mantén también BETTER_AUTH_URL alineada con tu URL pública — Better Auth construye los enlaces de verificación/reset a partir de ella.

Sin Resend la app arranca, pero los emails de verificación y restablecimiento de contraseña no se enviarán.

What sends automatically

EmailTriggerTemplate
VerificationSign up / resendverification-email.tsx
Password resetForgot passwordpassword-reset-email.tsx
WelcomeAccount createdwelcome-email.tsx

Better Auth posee tokens y URLs (src/lib/auth/auth.ts). La capa de email solo entrega vía helpers en src/lib/email/.

Templates

src/lib/email/templates/
  shared.tsx              # layout, brand name
  verification-email.tsx
  password-reset-email.tsx
  welcome-email.tsx

Construidos con @react-email/components. Edita el copy y el estilo en los archivos de plantilla. Nombre de marca: shared.tsx.

Add a new transactional email

  1. Crea src/lib/email/templates/your-email.tsx (usa TransactionalEmailLayout de shared.tsx)
  2. Exporta sendYourEmail(...) desde src/lib/email/index.ts
  3. Llámalo desde una server action, webhook o auth hook — nunca desde client components

Solo src/lib/email/client.ts importa el SDK de Resend directamente.

Auth UI routes

RoutePurpose
/forgot-passwordRequest reset link
/reset-passwordSet new password from email link
/verify-emailResend verification

Forgot-password comprueba isEmailConfigured() y muestra un error claro si Resend no está configurado.

Where to change this

WhatWhere
Send helperssrc/lib/email/index.ts
Resend client & configsrc/lib/email/client.ts, config.ts
Templatessrc/lib/email/templates/
Auth email hookssrc/lib/auth/auth.ts

Better Auth — flujo de verificación y reset.

Environment Variables — referencia de env.