Transactional email — the From address, provider, and notification recipients for invites, form submissions, and alerts.
Where it is
Settings → Email (/admin/settings?tab=email).
What the tab configures
How outgoing email is sent from your site. The CMS sends email for:
- Team invites — onboarding new members
- Form submissions — the form engine emails a copy of every submission to the site owner
- Agent notifications — alerts when a long-running agent finishes
- Backup alerts — when a scheduled backup fails
- Link checker reports — when the crawler finds broken links
- Lighthouse alerts — when scores drop below thresholds
Without this tab filled in, the CMS falls back to environment-level defaults from .env. Configuring per-site here overrides those.
The fields
| Field | Purpose |
|---|---|
| Provider | Which email service. Currently: Resend |
| API key | Your provider's API key. Stored as a site-level secret — never exposed to editors |
| From address | The From: header on outgoing mail. Must be a domain you've verified with the provider |
| From name | Display name on the From: header (e.g. "Acme CMS") |
| Reply-to | Where replies go. Often an inbox you actually monitor |
| Notification recipients | Comma-separated list of emails that get system alerts (build failures, scheduled backups, link-check reports) |
Resend setup
- Create a Resend account and verify your sending domain.
- Create an API key scoped to that domain.
- Paste the key in this tab.
- Send a test email using the Test button.
The test sends a short message to the first notification recipient. If it lands, you're done.
Deliverability checklist
If mails land in spam, check in order:
- SPF — domain DNS has
v=spf1 include:amazonses.com ~all(or Resend's equivalent) - DKIM — Resend's DKIM records are in DNS and verified
- DMARC — at least
v=DMARC1; p=none;for passive monitoring - From domain matches sending domain — don't send
@webhouse.dkmail from a non-webhouse-verified Resend domain
Resend's dashboard shows per-mail delivery status and SPF/DKIM verification results.
Per-form overrides
The form engine can override the recipient list on a per-form basis via notifications.email in cms.config.ts:
forms: [
{
name: 'contact',
notifications: {
email: ['sales@example.com', 'cc@example.com'],
},
...
},
],When set, submissions from that form go to the listed recipients instead of the site's default notification list.
What happens without a provider
Email-triggered features degrade cleanly:
- Team invites show the signup URL on screen (copy manually)
- Form submissions still save to the inbox, just no email
- Agent and backup alerts log to the event log but don't ping anyone
Related
- Forms — how inbound form submissions work
- Notifications & alerts — the full list of system events that can email
- Agents — agent completion notifications