cloudflare-email-service

Implement and troubleshoot Cloudflare Email Sending and Email Routing integrations.

Updated Jul 31, 2026
One-click install
npx skills add https://github.com/julianckt/adoptarun --skill cloudflare-email-service-julianckt
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: cloudflare-email-service
Source: https://github.com/julianckt/adoptarun/tree/main/.agents/skills/cloudflare-email-service
Command: npx skills add https://github.com/julianckt/adoptarun --skill cloudflare-email-service-julianckt

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires postal-mime, mimetext, @cloudflare/workers-types, and includes references (resource) components.

What problem does it solve? Cloudflare Email Service launched in 2025 and evolves rapidly, so pre-trained knowledge about its APIs, bindings, and configuration is often outdated or wrong. This Skill routes every email task to current documentation and codifies common mistakes (missing bindings, unverified domains, single-use raw streams) so integrations work on the first attempt. ## Core Features & Use Cases - Sending Emails: Send transactional email from Workers via the send_email binding, from external apps via the REST API, or from coding agents via wrangler CLI and MCP tools. - Receiving & Routing Emails: Handle inbound email with the Workers email() handler, including forwarding, replying, rejecting, and MIME parsing with postal-mime. - Deliverability & Monitoring: Manage SPF/DKIM/DMARC, suppression lists, sending quotas, and GraphQL analytics for delivery tracking. - Use Case: Build a support inbox where incoming emails are parsed and stored in a Durable Object, reviewed by a human, and answered later via the send_email binding with proper threading headers. ## Quick Start Ask the agent to send a transactional email from a Cloudflare Worker using the send_email binding, starting by verifying the domain is onboarded with wrangler email sending list.

Frequently Asked Questions about cloudflare-email-service

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I send an email from a Cloudflare Worker?

Add a send_email binding to wrangler.jsonc, then call env.EMAIL.send() with to, from, subject, and both html and text bodies. The from address must use a domain onboarded to Email Sending via wrangler email sending enable.

How do I receive and parse incoming emails with Email Routing?

Export an email() handler from your Worker and create a routing rule pointing addresses to it. Buffer message.raw once with new Response(message.raw).arrayBuffer(), then parse it with postal-mime to access subject, text, and attachments.

Should I use the Workers binding or the REST API for sending email?

Use the Workers binding for code running inside Workers since it needs no API keys. Use the REST API with a Bearer token for external applications in Node.js, Go, or Python, or when HTTP integration is explicitly required.

Why does reading message.raw twice return empty content?

message.raw is a single-use ReadableStream, so a second read returns nothing. Buffer it first with new Response(message.raw).arrayBuffer() and reuse the buffer for parsing, forwarding, or storage.

Can I use Cloudflare Email Service for marketing campaigns?

No. Email Service is restricted to transactional email triggered by user actions, such as signups, password resets, and order confirmations. Marketing or bulk campaigns require a dedicated marketing email platform.

Why does forwarding an email to my address fail silently?

message.forward() only works with verified destination addresses. Verify the destination first in the Dashboard or by running wrangler email routing addresses create before forwarding.