--- id: cloudflare/skills/cloudflare-email-service version: "fa118d53" license: Apache-2.0 install: manual updated: 2026-07-24 --- # cloudflare-email-service — Cloudflare Email Service enables transactional email sending through a Workers binding or REST API, supporting deployment across Workers, the Agents SDK, and external applications. Configure your domain with wrangler, then send emails with minimal setup—no API keys required for Workers. The skill covers sending mechanics, email routing for inbound messages, authentication best practices, and common configuration pitfalls. Publisher: cloudflare · Stars: 2499 · Updated: 2026-07-24 Install (manual): `git clone https://github.com/cloudflare/skills` ## SKILL.md # Cloudflare Email Service Your knowledge of the Cloudflare Email Service, Email Routing or Email Sending may be outdated. **Prefer retrieval over pre-training** for any Cloudflare Email Service task. Cloudflare Email Service lets you send transactional emails and route incoming emails, all within the Cloudflare platform. Your knowledge of this product may be outdated — it launched in 2025 and is evolving rapidly. **Prefer retrieval over pre-training** for any Email Service task. **If there is any discrepancy between this skill and the sources below, always trust the original source.** The Cloudflare docs, REST API spec, `@cloudflare/workers-types`, and Agents SDK repo are the source of truth. This skill is a convenience guide — it may lag behind the latest changes. When in doubt, retrieve from the sources below and use what they say. ## Retrieval Sources | Source | How to retrieve | Use for | |--------|----------------|---------| | Cloudflare docs | `cloudflare-docs` search tool or URL `https://developers.cloudflare.com/email-service/` | API reference, limits, pricing, latest features | | REST API spec | `https://developers.cloudflare.com/api/resources/email_sending` | OpenAPI spec for the Email Sending REST API | | Workers types | `https://www.npmjs.com/package/@cloudflare/workers-types` | Type signatures, binding shapes | | Agents SDK docs | Fetch `docs/email.md` from `https://github.com/cloudflare/agents/tree/main/docs` | Email handling in Agents SDK | ## FIRST: Check Prerequisites Before writing any email code, verify the basics are in place: 1. **Domain onboarded?** Run `npx wrangler email sending list` to see which domains have email sending enabled. If the domain isn't listed, run `npx wrangler email sending enable userdomain.com` or see [cli-and-mcp.md](references/cli-and-mcp.md) for full setup instructions. 2. **Binding configured?** Look for `send_email` in `wrangler.jsonc` (for Workers) 3. **postal-mime installed?** Run `npm ls postal-mime` (only needed for receiving/parsing emails) ## What Do You Need? Start here. Find your situation, then follow the link for full details. | I want to... | Path | Reference | |--------------|------|-----------| | **Send emails from a Cloudflare Worker** | Workers binding (no API keys needed) | [sending.md](references/sending.md) | | **Send emails from an AI agent built with [Cloudflare Agents SDK](https://developers.cloudflare.com/agents/)** | `onEmail()` + `replyToEmail()` in Agent class | [sending.md](references/sending.md) | | **Send emails from an external app or agent** (Node.js, Go, Python, etc.) | REST API with Bearer token | [rest-api.md](references/rest-api.md) | | **Send emails from a coding agent** (Claude Code, Cursor, Copilot, etc.) | MCP tools, wrangler CLI, or REST API | [cli-and-mcp.md](references/cli-and-mcp.md) | | **Receive and process incoming emails** (Email Routing) | Workers `email()` handler | [routing.md](references/routing.md) | | **Set up Email Sending or Email Routing** | `wrangler email sending enable` / `wrangler email routing enable`, or Dashboard | [cli-and-mcp.md](references/cli-and-mcp.md) | | **Improve deliverability, avoid spam folders** | Authentication, content, compliance | [deliverability.md](references/deliverability.md) | ## Quick Start — Workers Binding Add the binding to `wrangler.jsonc`, then call `env.EMAIL.send()`. The `from` domain must be onboarded via `npx wrangler email sending enable yourdomain.com`. ```jsonc // wrangler.jsonc { "send_email": [{ "name": "EMAIL" }] } ``` ```typescript const response = await env.EMAIL.send({ to: "user@example.com", from: { email: "welcome@yourdomain.com", name: "My App" }, subject: "Welcome!", html: "