Operate and launch

Transactional Email

Configure Resend, React Email templates, safe local auth links, and durable delivery jobs.

Synced with starter commit 7580470.

Use this page before enabling signup verification, password recovery, billing, invitations, or reservation confirmations. Sushi SaaS ships one concrete delivery choice—Resend with React Email—not a multi-provider abstraction. You can launch with it or replace src/services/email/send.ts while keeping the templates and calling contracts.

Decide what your users should receive

  • Verify one sender domain and choose a recognizable EMAIL_FROM; SPF, DKIM, and DMARC are part of the feature, not optional polish.
  • Verification and password-reset links are sent in the authentication request because the user is waiting for them. Welcome, billing, invitation, and reservation messages use durable jobs because they may safely arrive a little later.
  • Local development can print auth links instead of sending mail. Production deliberately refuses that mode.

Ready to launch means: a real inbox receives every enabled template, links return to the right locale and domain, duplicate job attempts produce one provider delivery, and provider rejection appears in your queue/readiness monitoring.

Resend and React Email are already integrated. Set RESEND_API_KEY and a verified EMAIL_FROM. Configure SPF and DKIM, then add DMARC for production.

Templates cover verification, password reset, welcome, payment success/failure, reservation confirmation, and organization invitations. Customize templates under src/services/email/ and keep delivery orchestration in services.

Auth links may be logged locally when no provider is configured or AUTH_DEV_EMAIL_LINKS=true; production rejects this escape hatch. Product email is queued as durable work and uses the job UUID as the provider idempotency key, so retry does not create duplicate delivery. Keep /api/cron/jobs running and alert on degraded readiness or exhausted jobs.

Do not fire-and-forget a promise from a route and do not add a public “test email” endpoint. Enqueue after the domain write, avoid secrets and unnecessary personal data in payloads, and test provider failure, retry, duplicate execution, suppression/blocklist behavior, and translated links.

Next: Set up Durable Jobs and Readiness before relying on welcome, billing, invitation, or reservation email in production.

Transactional Email · Sushi SaaS