Configure Email
Copy page
Set up SMTP email for team invitations and password resets
Configure email delivery so the platform can send team invitation emails and password reset links. Without email configured, these features degrade gracefully — invitation links are shown directly in the UI and password reset is disabled.
For a feature overview of invitations and password reset, see Access Control.
How It Works
The email system uses a priority-based transport selection:
| Priority | Transport | When used |
|---|---|---|
| 1 | Resend | RESEND_API_KEY is set |
| 2 | Generic SMTP | SMTP_HOST is set (and no Resend key) |
| 3 | Disabled | Neither is set — email features are turned off |
Both transports require SMTP_FROM_ADDRESS to be set. If the from address is missing, email is disabled even when a transport is configured.
Environment Variables
| Variable | Required | Description |
|---|---|---|
SMTP_FROM_ADDRESS | Yes | Sender email address (e.g., noreply@example.com) |
SMTP_FROM_NAME | No | Sender display name (e.g., Inkeep). Defaults to the address. |
SMTP_REPLY_TO | No | Reply-to address. Defaults to the from address. |
Option A: Resend (Recommended for Production)
Resend provides a managed email delivery service with high deliverability.
| Variable | Required | Description |
|---|---|---|
RESEND_API_KEY | Yes | Your Resend API key |
When using Resend, you don't need to configure any SMTP host or port variables — the system connects to Resend's SMTP relay automatically.
Option B: Generic SMTP
Use any SMTP server (Amazon SES, SendGrid, Gmail, self-hosted Postfix, etc.).
| Variable | Required | Description |
|---|---|---|
SMTP_HOST | Yes | SMTP server hostname |
SMTP_PORT | No | Server port. Default: 587 |
SMTP_SECURE | No | Use TLS/SSL. Auto-detected from port if not set (true for port 465). |
SMTP_USER | No | SMTP authentication username |
SMTP_PASSWORD | No | SMTP authentication password |
Local Development with Mailpit
Mailpit captures outgoing email locally without sending it to real recipients. This is the recommended setup for development and testing.
Mailpit is included in the default Docker Compose configuration. Configure the SMTP environment variables to point to it:
Start services and verify
Open http://localhost:8025 to view the Mailpit inbox. Any emails sent by the platform (invitations, password resets) will appear here.
What Happens Without Email
When email is not configured, the platform adjusts its behavior:
| Feature | With email | Without email |
|---|---|---|
| Team invitations | Invitation email sent to the recipient | Invitation link shown directly in the UI |
| Password reset | Reset link emailed to the user | "Forgot password?" link hidden from the sign-in page |
No errors are thrown — the UI adapts automatically based on whether email is available.
Verifying Email Configuration
After configuring your environment variables, restart services and test:
- Go to Settings in the sidebar
- Click Invite and send a test invitation
- Verify the email arrives (in Mailpit for local dev, or the real inbox for production)
If using Mailpit, open http://localhost:8025 to see the captured email.
Troubleshooting
Emails not being sent
- Verify
SMTP_FROM_ADDRESSis set — this is required for all transports - Check the API server logs for
[email]warnings about missing configuration - For Resend: confirm your API key is valid and the from address domain is verified in Resend
- For generic SMTP: verify the host, port, and credentials are correct
Invitation link shown instead of email
This is expected behavior when email is not configured. Set up SMTP or Resend to enable email delivery.
"Password reset unavailable" message
The forgot-password page shows this when email is not configured. Configure email to enable self-service password resets.