Email setup

Your project uses SMTP to send transactional emails: email verification, password reset, invitation links, email change confirmation, and in-app notifications.

What happens without email configured?

If EMAIL_SMTP_HOST or EMAIL_FROM are not set, emails are silently skipped — the app logs the email payload to the console instead of sending it. Everything else continues to work normally.

This means you can develop without an email provider. When a verification or reset email would be sent, check your terminal output to find the link.

Tip: You can also set AUTH_BYPASS_EMAIL_VERIFICATION=true in your .env to skip email verification entirely during development.

Environment variables

Add these to packages/backend/.env:

EMAIL_FROM=[email protected]
EMAIL_SMTP_HOST=smtp.example.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=your-username
EMAIL_SMTP_PASSWORD=your-password

Provider examples

Below are SMTP settings for popular email providers. Replace credentials with your own.

Resend

EMAIL_FROM=[email protected]
EMAIL_SMTP_HOST=smtp.resend.com
EMAIL_SMTP_PORT=465
EMAIL_SMTP_USER=resend
EMAIL_SMTP_PASSWORD=re_your_api_key

Create an API key at resend.com/api-keys. You must verify your sending domain first.

SendGrid

EMAIL_FROM=[email protected]
EMAIL_SMTP_HOST=smtp.sendgrid.net
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=apikey
EMAIL_SMTP_PASSWORD=SG.your_api_key

The SMTP user is literally apikey. Create an API key at Settings → API Keys in the SendGrid dashboard.

Amazon SES

EMAIL_FROM=[email protected]
EMAIL_SMTP_HOST=email-smtp.us-east-1.amazonaws.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=your-smtp-username
EMAIL_SMTP_PASSWORD=your-smtp-password

Replace the region in the host with your SES region. Generate SMTP credentials in the AWS SES console → SMTP settings.

Mailgun

EMAIL_FROM=[email protected]
EMAIL_SMTP_HOST=smtp.mailgun.org
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=[email protected]
EMAIL_SMTP_PASSWORD=your-mailgun-password

Find SMTP credentials under Sending → Domain settings → SMTP credentials in the Mailgun dashboard.

Postmark

EMAIL_FROM=[email protected]
EMAIL_SMTP_HOST=smtp.postmarkapp.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=your-server-api-token
EMAIL_SMTP_PASSWORD=your-server-api-token

Both user and password are the same Server API Token. Find it under Server → API Tokens in Postmark.

Gmail (development only)

EMAIL_FROM=[email protected]
EMAIL_SMTP_HOST=smtp.gmail.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=[email protected]
EMAIL_SMTP_PASSWORD=your-app-password

Use an App Password, not your regular password. Gmail has a daily sending limit of ~500 emails — use a dedicated provider for production.