* docs: restructure sidebar, expand FAQ, enhance send mail docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: remove specific example domain reference in FAQ per review Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
5.0 KiB
Configure Email Sending
::: warning Note
All three methods can be configured simultaneously. When sending emails, it will prioritize using resend, if resend is not configured, it will use smtp.
If a Cloudflare authenticated forwarding email address is configured, CF's internal API will be prioritized for sending emails :::
Send Emails Using Resend
Register at https://resend.com/domains and add DNS records according to the instructions.
Create an api key on the API KEYS page.
Then execute the following command to add RESEND_TOKEN to secrets:
Note
If you find this troublesome, you can also put it directly in plain text under
[vars]inwrangler.toml, but this is not recommended
If you deployed through the UI, you can add it under Variables and Secrets in the Cloudflare UI interface.
# Switch to worker directory
cd worker
wrangler secret put RESEND_TOKEN
If you have multiple domains with different api keys, you can add multiple secrets in wrangler.toml, named RESEND_TOKEN_ + <UPPERCASE DOMAIN WITH . REPLACED BY _>, for example:
wrangler secret put RESEND_TOKEN_XXX_COM
wrangler secret put RESEND_TOKEN_DREAMHUNTER2333_XYZ
Send Emails Using SMTP
The format of SMTP_CONFIG is as follows. The key must be your own sending domain, and the value is the SMTP configuration.
For SMTP configuration format details, refer to zou-yu/worker-mailer
[!warning] Important The JSON key (e.g.
your-domain.comin the example below) must be replaced with your own domain — the domain configured in yourDOMAINSvariable. This is one of the most common configuration mistakes. Do not copy the example domain directly.
{
"your-domain.com": {
"host": "smtp.example.com",
"port": 465,
"secure": true,
"authType": [
"plain",
"login"
],
"credentials": {
"username": "your-smtp-username",
"password": "your-smtp-password"
}
}
}
Field Reference:
| Field | Description |
|---|---|
key (e.g. your-domain.com) |
Your sending domain, must match a domain configured in DOMAINS |
host |
SMTP server address, e.g. smtp.mailgun.org, smtp.gmail.com, or your self-hosted SMTP server |
port |
SMTP port, typically 465 (SSL) or 587 (STARTTLS) |
secure |
Whether to use SSL/TLS. Set to true for port 465, false for port 587 |
authType |
Authentication method, typically ["plain", "login"] |
credentials.username |
SMTP server login username |
credentials.password |
SMTP server login password |
If you have multiple domains using different SMTP services, add multiple keys in the same JSON:
{
"domain-a.com": {
"host": "smtp.mailgun.org",
"port": 465,
"secure": true,
"authType": ["plain", "login"],
"credentials": { "username": "user@domain-a.com", "password": "xxx" }
},
"domain-b.com": {
"host": "smtp.gmail.com",
"port": 465,
"secure": true,
"authType": ["plain", "login"],
"credentials": { "username": "user@gmail.com", "password": "app-password" }
}
}
Then execute the following command to add SMTP_CONFIG to secrets:
Note
If you find this troublesome, you can also put it directly in plain text under
[vars]inwrangler.toml, but this is not recommended
If you deployed through the UI, you can add it under Variables and Secrets in the Cloudflare UI interface.
# Switch to worker directory
cd worker
wrangler secret put SMTP_CONFIG
Send Balance Mechanism
Users need a send balance to send emails. The balance mechanism works as follows:
- Request Send Permission: Users must first click the "Request Send Permission" button in the frontend
- Default Quota: Upon requesting, users receive the default quota set by the
DEFAULT_SEND_BALANCEenvironment variable (defaults to 0 if not set) - Unlimited Sending: The following methods can bypass balance checks:
- Add the address to the "No Limit Send Address List" in the admin console
- Configure the
NO_LIMIT_SEND_ROLEenvironment variable to specify roles that can send without limits
Note
DEFAULT_SEND_BALANCEdoes NOT automatically grant balance to all addresses. Users must actively request send permission first for the quota to take effect.
Send Emails to Authenticated Forwarding Addresses on Cloudflare
Only supported for CLI deployment, add send_email configuration in wrangler.toml.
The destination email address must be an authenticated email address on Cloudflare, which has significant limitations. If you need to send emails to other addresses, you can use resend or smtp to send emails.
# Send emails through Cloudflare
send_email = [
{ name = "SEND_MAIL" },
]
Admin console account configuration Verified address list (can send emails through CF internal API)