cloudflare/skills · Official

cloudflare-email-service

Implement or troubleshoot Cloudflare Email Sending and Email Routing integrations and their delivery configuration.

All-time #442 Trending #306 Hot #6555 First seen Apr 15, 2026
8-week activity · all time api

Installation

$ npx skills add cloudflare/skills --skill cloudflare-email-service

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Security audits

Partner security reviews for this skill.

agent-trust-hub SAFE

Analyzed Apr 15, 2026

This skill provides comprehensive and secure guidance for using the Cloudflare Email Service. It follows industry best practices for credential management, references official documentation, and includes architectural advice for safely handling incoming data.

snyk MEDIUM

Analyzed Apr 15, 2026

[MEDIUM] W011: Third-party content exposure detected (indirect prompt injection risk). [MEDIUM] W012: Unverifiable external dependency detected (runtime URL that controls agent).

socket Score 0.9000 · 0 alerts

Analyzed Apr 15, 2026

  • license 1
  • maintenance 1
  • quality 0.9
  • supply chain 1
  • vulnerability 1

0 alerts

Also in this package

Other skills from cloudflare/skills · top by installs.

npx skills add cloudflare/skills

Browse all from cloudflare/skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Declared
Cursor Declared
Codex Not declared
GitHub Copilot Declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 2.8K
License LICENSE
Default branch main
Open issues 8
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

Declared agents claude-code cursor github-copilot

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 6,586 B
  • docs SUMMARY.md 3,969 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 60,100 installs

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 MCP docs 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 Email agent walkthrough 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 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)

Sending Workflow

Prefer the binding for Workers; use REST for external apps or when explicitly requested. Read [sending.md](references/sending.md) or [rest-api.md](references/rest-api.md) to retrieve the documentation for the selected task before writing code. These guides cover setup, recipients, attachments, headers, limits, response handling, and errors; the Workers guide also covers Agents SDK integration and types matched to the project configuration.

Common Mistakes

Mistake Why It Happens Fix
Forgetting send_email binding in wrangler config Email Service uses a binding, not an API key Add "send_email": [{ "name": "EMAIL" }] to wrangler.jsonc
Sending from an unverified domain Domain must be onboarded onto Email Sending before first send Run wrangler email sending enable yourdomain.com or onboard in Dashboard
Reading message.raw twice in email handler The raw stream is single-use — second read returns empty Buffer first: const raw = await new Response(message.raw).arrayBuffer()
Missing text field (HTML only) Some email clients only show plain text; also helps spam scores Always include both html and text versions
Using email for marketing/bulk sends Email Service is for transactional email only Use a dedicated marketing email platform for newsletters and campaigns
Forwarding to unverified destinations message.forward() only works with verified addresses Run wrangler email routing addresses create [email protected] or add in Dashboard
Testing with fake addresses Bounces from non-existent addresses hurt sender reputation Use real addresses you control during development
Hardcoding API tokens in source code Tokens in code get committed and leaked Use environment variables or Cloudflare secrets
Ignoring the from domain requirement The from address must use a domain onboarded to Email Service Verify the domain first, then send from [email protected]
Using email key in REST API from object REST API uses address not email for from object Use { "address": "...", "name": "..." } for REST, { "email": "...", "name": "..." } for Workers
Using replyTo in REST API REST API uses snake_case field names Use reply_to for REST API, replyTo for Workers binding

References

Read the reference that matches your situation. You don't need all of them.

  • [references/sending.md](references/sending.md) — Documentation map for Workers binding, attachments, and Agents SDK email.
  • [references/rest-api.md](references/rest-api.md) — Documentation map for HTTP sending, request schemas, responses, and errors.
  • [references/routing.md](references/routing.md) — Inbound email() handler, forwarding, replying, parsing. For receiving emails.
  • [references/cli-and-mcp.md](references/cli-and-mcp.md) — Domain setup, wrangler commands, MCP tools. For first-time setup.
  • [references/deliverability.md](references/deliverability.md) — SPF/DKIM/DMARC, bounces, suppressions, best practices.