Skip to main content
Someone signs up and an activation mail is waiting in their inbox. She sends it through Resend or through your own SMTP server, whichever you point her at.
Set this up before you invite anyone. Without a working provider, password resets report success and send nothing, and there is no way for someone locked out to get back in. It is the most common thing self-hosters wish they had done on day one.

What changes when you turn it on

Configuring a provider also switches on account activation. From that point, everyone you invite has to click a link in their mail before they can sign in. Until then, new accounts are active immediately and no mail is sent at all. That makes the half-configured state the worst one to be in: accounts get created inactive, and the mail that would let them in never arrives. Set the provider and its credentials, or set neither.

Pick a provider

1

Choose one and name it

EMAIL_PROVIDER has to be exactly resend or nodemailer. Any other value, including leaving it unset, selects a provider that quietly sends nothing.
2

Set who the mail comes from

Both providers need these:
3

Add the credentials

Register at Resend and verify the domain you want to send from. Copy the API key from their dashboard.
The address in EMAIL_FROM_ADDRESS has to be on a domain you verified with Resend, or they reject the send.
4

Apply and test

Then use the password reset form with an address you can read. The mail should arrive within a minute. If it does not, the logs will say why:
The examples above use KEY=value, which is the syntax for an env file. If you are editing docker-compose.yaml directly, the same settings are written KEY: 'value' with a colon. Docker Compose covers both.

If mail does not arrive

EMAIL_PROVIDER is not exactly resend or nodemailer. A typo, a capital letter or an unset value all land on the provider that does nothing, and it does not complain.
EMAIL_FROM_ADDRESS has to be on a domain verified in your Resend account. An unverified domain, or a generic one you do not own, is refused.
Many hosting providers block outbound port 25, and some block 465 and 587 by default until you ask. Test from the server itself with nc -zv smtp.example.com 465.
That is activation working while mail is not. Fix the provider, then have the person request a new activation mail. Activation links are short lived, so an old one will not help.

Passwordless sign-in

One-time codes by mail instead of passwords, which needs a working provider

Configuration reference

Every mail variable and what it does