Limits
Email sending quotas, rate limits, and how to request higher limits for production use
Cloudflare Email Service has the following limits to ensure optimal performance and prevent abuse. These limits apply to emails sent via the REST API, the Workers binding, and SMTP unless noted otherwise.
New accounts start with a conservative daily quota and scale up over time based on your sending behavior, deliverability rates, and account standing. Limits are applied per account and may be adjusted automatically as your reputation improves.
If you need higher sending limits sooner than automatic adjustment provides, refer to "Need a higher limit?" at the bottom of this page to request an increase.
Before you onboard a sending domain, you can send emails only to verified destination addresses in your account. After you onboard a sending domain, you can send to any recipient immediately.
Sends to verified destination addresses are always free: they do not count toward your monthly quota or your daily sending limits, on any plan, including when only Email Routing is configured. You can only send from your routing domains.
| Component | Limit | Notes |
|---|---|---|
| Recipients (to, cc, bcc) | 50 per email | Combined across all recipient fields |
| Subject line | 998 characters | RFC 5322 compliant |
| Total message size | 5 MiB | Including attachments |
| Total message size | 25 MiB | For verified destination addresses only |
| Header size | 16 KB | All custom headers combined |
| Limit | Value | Notes |
|---|---|---|
| Domains per zone | 30 | Combined total of domains configured for Email Routing or Email Sending in a zone, including the apex domain |
The following limits apply to inbound email handled by Email Routing.
| Limit | Value | Notes |
|---|---|---|
| Routing rules per domain | 200 | Each rule maps an email pattern to a destination |
| Destination addresses per account | 200 | Verified destination addresses are shared across all domains in the account |
| Inbound message size | 25 MiB | Messages larger than this are rejected |
Reply References entries | 100 | If the incoming email has more than 100 References entries, message.reply() throws. Reduces reply loops. |
Each routing rule maps one email pattern to one destination address or one Worker. To forward a single email pattern to multiple destinations, use a Worker that calls forward() once per destination. All destinations must be verified beforehand.
Workers that handle incoming emails count toward the standard Workers CPU and memory limits. On the Workers Free plan, complex handlers may exceed these limits and fail to process a message. Failed invocations appear in Workers logs with the EXCEEDED_CPU error. Upgrade to the Workers Paid plan for higher CPU and memory limits.
Emails sent from a Worker using the send_email binding appear in the Email Routing summary as dropped, even when they were delivered successfully. To track outbound send success, use Email sending metrics and logs instead.
All email sending must follow applicable anti-spam laws and regulations to maintain good standing and deliverability.
- CAN-SPAM Act (United States)
- GDPR (European Union)
- CASL (Canada)
- Include proper unsubscribe mechanisms
- Honor opt-out requests promptly