Products · Developer platform
Email Service
Send transactional emails at scale with Cloudflare Email Service
Pricing and limits
Pricing
As of Nov 3, 2026, from Cloudflare's docs, last updated there Jun 9, 2026. Licensed CC BY 4.0; navigation removed.
Cloudflare Email Service pricing is based on your Cloudflare plan and email usage.
Plan pricing
Email Routing is available on both the Workers Free and Workers Paid plans. Sending to arbitrary recipients requires the Workers Paid plan. Sending to verified destination addresses in your account is free on all plans, including when only Email Routing is configured.
| Workers Free | Workers Paid | |
|---|---|---|
| Outbound emails (Email Sending) | Not available | 3,000 included per month, then $0.35 per 1,000 emails |
| Inbound emails (Email Routing) | Unlimited | Unlimited |
The 3,000 included emails apply per account, per month, aligned with your Cloudflare subscription billing cycle. Emails that hard-bounce or are otherwise accepted by Email Service count toward the quota. Emails rejected at the API boundary, including sends blocked by the suppression list, do not count toward the quota.
Sends to verified destination addresses are free and do not count toward the included quota.
Email Routing Workers is billed according to Workers pricing.
Limits
As of Nov 3, 2026, from Cloudflare's docs, last updated there Oct 30, 2026. Licensed CC BY 4.0; navigation removed.
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.
Daily sending limits
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.
Verified destination addresses
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.
Email content limits
| 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 | 25 MiB | Including attachments |
| Header size | 16 KB | All custom headers combined |
Suppression list limits
The following limits apply to the Email Sending suppression list API:
| Limit | Value | Notes |
|---|---|---|
| Active entries | 1 per address and scope | One account suppression and one per sending domain |
| Results per page | 1,000 | Maximum per_page value with a default of 100 |
| Items per bulk import | 1,000 | Split larger imports across several requests |
| Bulk import requests | 10 per minute | Applies per account and returns 429 when exceeded |
| Note length | 1,000 characters | The optional note field on an entry |
The suppression list has no total-count field. Refer to the list suppressions API reference for pagination details.
Zone limits
| 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 |
Email Routing limits
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.
Routing to Workers on the Workers Free plan
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 Workers
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.
Compliance
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
Need a higher limit?
To request an adjustment to a limit, complete the Limit Increase Request Form ↗︎. If the limit can be increased, Cloudflare will contact you with next steps.
Timeline
September 2026
- Suppress recipients for one sending domain
Email Sending suppressions now have a scope: account: The suppression applies to every sending domain and subdomain in your account. This is the default. sending_domain: The suppression applies to one sending domain only. A suppression for mail.myappexample.com does not block mail from myappexample.com. Most importantly, Email Sending now automatically creates bounce and complaint suppressions at…
- Manage Email Routing rules with Wrangler
You can now manage Email Routing rules that route emails to Workers from your Wrangler configuration. Add literal addresses or a catch-all address to the top-level addresses field: { "$schema": "./node_modules/wrangler/config-schema.json", "name": "invoice-handler", "main": "src/index.ts", // Set this to today's date "compatibility_date": "2026-10-30", "addresses": [ "invoice@yourdomain.com" ] }…
July 2026
- Preview sent emails in the Activity log
You can now preview the content of sent emails directly from the Email Service Activity log. Expand a sent email and open the new Preview section to inspect the message as it was sent, across tabs for the rendered HTML body, the Text body, the Headers, the Attachments, and the full Raw RFC 5322 ↗︎ source. Previously, the Activity log surfaced delivery and authentication metadata but not the messa…
- Subscribe to Email Sending events with Queues
You can now subscribe to Email Sending events through Queues event subscriptions and receive outbound transactional email lifecycle events on a queue. Each subscription is scoped to one sending domain — either the zone apex, such as example.com, or a verified sending subdomain, such as send.example.com. Six event types are published: message.delivered, message.deferred, message.bounced, message.f…
June 2026
- Authenticated SMTP submission now available in beta
You can now send emails through Cloudflare Email Service using authenticated SMTP submission on smtp.mx.cloudflare.net:465. SMTP joins the REST API and the Workers binding as a third way to send transactional email — useful for existing applications that already speak SMTP and language-native SMTP libraries (Nodemailer, smtplib, PHPMailer, JavaMail). Setting Value Host smtp.mx.cloudflare.net Port…
May 2026
- Send emails with named recipient addresses
You can now send emails with display names on recipient addresses in addition to the existing from support. Pass an object with email and an optional name field for to, cc, bcc, replyTo, or from: src/index.jsjsexport default { async fetch(request, env) { const response = await env.EMAIL.send({ from: { email: "support@example.com", name: "Support Team" }, to: { email: "jane@example.com", name: "Ja…
April 2026
- Email Sending now in public beta
Email Sending is now in public beta. Send transactional emails directly from Workers (env.EMAIL.send()) or the REST API, with support for HTML, plain text, attachments, inline images, and custom headers. Email Sending joins Email Routing ↗︎ under the new Cloudflare Email Service — a single service for sending and receiving email on the Cloudflare developer platform. Send an email from a Worker in…
July 2025
- Subaddressing support in Email Routing
Subaddressing, as defined in RFC 5233 ↗︎, also known as plus addressing, is now supported in Email Routing. This enables using the "+" separator to augment your custom addresses with arbitrary detail information. Now you can send an email to user+detail@example.com and it will be captured by the user@example.com custom address. The +detail part is ignored by Email Routing, but it can be captured…
June 2025
- Mail authentication requirements for Email Routing
The Email Routing platform supports SPF ↗︎ records and DKIM (DomainKeys Identified Mail) ↗︎ signatures and honors these protocols when the sending domain has them configured. However, if the sending domain doesn't implement them, we still forward the emails to upstream mailbox providers. Starting on July 3, 2025, we will require all emails to be authenticated using at least one of the protocols,…
April 2025
- Local development support for Email Workers
Email Workers enables developers to programmatically take action on anything that hits their email inbox. If you're building with Email Workers, you can now test the behavior of an Email Worker script, receiving, replying and sending emails in your local environment using wrangler dev. Below is an example that shows you how you can receive messages using the email() handler and parse them using p…
March 2025
- Threaded replies now possible in Email Workers
We’re removing some of the restrictions in Email Routing so that AI Agents and task automation can better handle email workflows, including how Workers can reply to incoming emails. It's now possible to keep a threaded email conversation with an Email Worker script as long as: The incoming email has to have valid DMARC ↗︎. The email can only be replied to once in the same EmailMessage event. The…