cloudflare-email-service

작성자: cloudflare

Cloudflare Email Service(이메일 발송 + 이메일 라우팅)를 사용하여 트랜잭션 이메일을 보내고 받습니다. 이메일 발송(Workers 바인딩 또는 REST…)을 구축할 때 사용하세요.

npx skills add https://github.com/cloudflare/skills --skill cloudflare-email-service

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

SourceHow to retrieveUse for
Cloudflare docscloudflare-docs search tool or URL https://developers.cloudflare.com/email-service/API reference, limits, pricing, latest features
REST API spechttps://developers.cloudflare.com/api/resources/email_sendingOpenAPI spec for the Email Sending REST API
Workers typeshttps://www.npmjs.com/package/@cloudflare/workers-typesType signatures, binding shapes
Agents SDK docsFetch docs/email.md from https://github.com/cloudflare/agents/tree/main/docsEmail 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 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...PathReference
Send emails from a Cloudflare WorkerWorkers binding (no API keys needed)sending.md
Send emails from an AI agent built with Cloudflare Agents SDKonEmail() + replyToEmail() in Agent classsending.md
Send emails from an external app or agent (Node.js, Go, Python, etc.)REST API with Bearer tokenrest-api.md
Send emails from a coding agent (Claude Code, Cursor, Copilot, etc.)MCP tools, wrangler CLI, or REST APIcli-and-mcp.md
Receive and process incoming emails (Email Routing)Workers email() handlerrouting.md
Set up Email Sending or Email Routingwrangler email sending enable / wrangler email routing enable, or Dashboardcli-and-mcp.md
Improve deliverability, avoid spam foldersAuthentication, content, compliancedeliverability.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.

// wrangler.jsonc
{ "send_email": [{ "name": "EMAIL" }] }
const response = await env.EMAIL.send({
  to: "[email protected]",
  from: { email: "[email protected]", name: "My App" },
  subject: "Welcome!",
  html: "<h1>Welcome!</h1>",
  text: "Welcome!",
});

The binding is recommended for Workers — no API keys needed. If a user specifically requests the REST API from within a Worker (e.g., they already have an API token workflow), that works too — see rest-api.md.

See sending.md for the full API, batch sends, attachments, custom headers, restricted bindings, and Agents SDK integration.

Quick Start — REST API

For apps outside Workers, or within Workers if the user explicitly requests it. Key differences from the Workers binding:

  • Endpoint: POST https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send
  • from object uses address (not email): { "address": "...", "name": "..." }
  • replyTo is reply_to (snake_case)
  • Response returns { delivered: [], permanent_bounces: [], queued: [] } (not messageId)

See rest-api.md for curl examples, response format, and error handling.

Common Mistakes

MistakeWhy It HappensFix
Forgetting send_email binding in wrangler configEmail Service uses a binding, not an API keyAdd "send_email": [{ "name": "EMAIL" }] to wrangler.jsonc
Sending from an unverified domainDomain must be onboarded onto Email Sending before first sendRun wrangler email sending enable yourdomain.com or onboard in Dashboard
Reading message.raw twice in email handlerThe raw stream is single-use — second read returns emptyBuffer first: const raw = await new Response(message.raw).arrayBuffer()
Missing text field (HTML only)Some email clients only show plain text; also helps spam scoresAlways include both html and text versions
Using email for marketing/bulk sendsEmail Service is for transactional email onlyUse a dedicated marketing email platform for newsletters and campaigns
Forwarding to unverified destinationsmessage.forward() only works with verified addressesRun wrangler email routing addresses create [email protected] or add in Dashboard
Testing with fake addressesBounces from non-existent addresses hurt sender reputationUse real addresses you control during development
Hardcoding API tokens in source codeTokens in code get committed and leakedUse environment variables or Cloudflare secrets
Ignoring the from domain requirementThe from address must use a domain onboarded to Email ServiceVerify the domain first, then send from [email protected]
Using email key in REST API from objectREST API uses address not email for from objectUse { "address": "...", "name": "..." } for REST, { "email": "...", "name": "..." } for Workers
Using replyTo in REST APIREST API uses snake_case field namesUse reply_to for REST API, replyTo for Workers binding

References

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

cloudflare의 다른 스킬

write-endpoints
cloudflare
chanfana를 사용한 OpenAPI 엔드포인트 구축을 위한 종합 가이드 - 스키마 정의, 요청 검증, CRUD 작업, D1 데이터베이스 통합 등
official
agents-sdk
cloudflare
Cloudflare Workers에서 Agents SDK를 사용하여 AI 에이전트를 구축하세요. 상태 저장 에이전트, 지속 가능한 워크플로우, 실시간 WebSocket 앱, 예약된 작업 등을 생성할 때 로드하세요.
official
building-ai-agent-on-cloudflare
cloudflare
Cloudflare의 Agents SDK를 사용하여 지속적 상태, 실시간 통신, 도구 통합을 갖춘 AI 기반 에이전트를 생성합니다.
official
building-mcp-server-on-cloudflare
cloudflare
Cloudflare Workers에서 도구, 인증, 배포를 포함한 프로덕션 준비 완료 Model Context Protocol 서버를 생성합니다.
official
changelog
cloudflare
Cloudflare 문서 사이트의 제품 변경 로그 항목을 생성, 업데이트 및 검토합니다. 변경 로그 MDX 파일을 생성하거나 기존 파일을 편집할 때 로드합니다.
official
cloudflare
cloudflare
Cloudflare 플랫폼 전반을 다루는 스킬로, Workers, Pages, 스토리지(KV, D1, R2), AI(Workers AI, Vectorize, Agents SDK), 네트워킹(Tunnel, Spectrum) 등을 포함합니다.
official
code-review
cloudflare
작업자 및 Cloudflare Developer Platform 코드의 타입 정확성, API 사용법, 구성 유효성을 검토합니다. TypeScript/JavaScript를 검토할 때 로드합니다…
official
docs-review
cloudflare
문서 PR을 검토하고 GitHub PR 제안을 제공합니다. 문서 내용에 대한 리뷰, 변경 제안 또는 피드백을 요청받을 때 로드됩니다. MDX 등을 다룹니다.
official