Skip to content

SMTP / Resend setup

Configure settings.smtp via PATCH /api/settings or the dashboard’s Email → Delivery page (see Settings pages):

{
"smtp": {
"enabled": true,
"host": "smtp.resend.com",
"port": 465,
"username": "resend",
"password": "re_...",
"tls": true
}
}

Resend, SendGrid, Postmark, and most transactional providers all speak SMTP — point host/port/username/password at whatever the provider’s SMTP credentials page gives you (Resend’s SMTP host is smtp.resend.com, username resend, password an API key). tls: true selects implicit TLS (typically port 465); leave it false for opportunistic STARTTLS (typically port 587).

POST /api/settings/test/email sends a real test message through whatever’s currently configured — use it to verify credentials before relying on a flow that depends on mail (verification, password reset, magic link) actually reaching an inbox.

smtp.enabled: false — the default on every fresh install — doesn’t mean mail goes nowhere: a zero-config Log backend keeps the last 100 messages in memory, browsable at GET /api/dev/mails and in the dashboard’s Mail inbox page, HTML and all. Every endpoint and recipe on this page (POST /api/mails/send, magic-link login, OTP, template previews) works exactly the same way with no mail server at all — useful for local development and for this feature’s own test suite. It stops the moment smtp.enabled is true: /api/dev/mails then 404s outright, so real outgoing mail is never captured there.

settings.meta.senderName/senderAddress set the default From: for every mail this platform sends, overridable per send via $mails.send’s own from (superuser/API-key sends only — see Sending).