為什麼 Email 是 Agent 最好的介面

Email 是世界上最普及的溝通介面。不需要安裝任何 SDK,不需要申請帳號,每個人都已經有一個地址。對開發者來說,Email 早已是基礎設施的一部分:用戶註冊驗證、訂單通知、發票寄送——這些場景無處不在。

但 agent 對 Email 的需求和過去的通知系統完全不同。客服 agent 需要接收客戶的問題並回覆;發票處理 agent 需要讀取附件、提取數字、更新系統;帳號驗證 agent 需要確認郵件內容是否符合規則。隨著 agent 承擔更多真實工作,Email 從「通知管道」變成了「工作介面」。

理解這個轉變,需要先釐清 chatbot 和 agent 最根本的差異:

Chatbot——現在回答,或什麼都不做。它活在即時對話的框架裡,你等它,它等你,沒有對話就沒有行動。

Agent——按自己的節奏工作。接到一封 Email,可以花一小時查三個系統、比對資料、評估風險,最後才回覆一封完整的答案。它可以排定後續任務、把邊緣案例轉交人工處理、在你睡覺的時候繼續工作。

Email 的非同步天性,剛好完美匹配 agent 的工作模式。這正是 Cloudflare 在 Agents Week 發布 Email Service 時強調的核心洞察。

Email 對 Agent 的三個優勢

1. 無需客戶安裝任何東西——對方只需要有 Email 帳號,不需要下載 app、不需要 API 金鑰、不需要建立帳號。覆蓋範圍是 100% 的企業用戶。

2. 天然非同步——agent 可以花多久時間就花多久。沒有 timeout 壓力,沒有「用戶在等」的即時性限制。查資料庫、呼叫外部 API、等待第三方確認——全都可以。

3. 天然的 human-in-the-loop——客戶在等待期間保留完整主動權:可以追加說明、可以取消請求、可以轉發給同事。Email 對話串就是天然的稽核日誌。

Email Sending:Public Beta 開放

Cloudflare Email Sending 在 Agents Week 正式從 Private Beta 升級為 Public Beta,任何人都可以申請使用。核心功能是讓 Workers 透過原生 binding 直接發送交易型 Email——不需要第三方 SMTP 服務,不需要管理 API 金鑰,不需要在 code 裡處理 credentials。

Workers Binding — 直接從 Worker 發送 Email
export default {
  async fetch(request, env, ctx) {
    await env.EMAIL.send({
      to: "user@example.com",
      from: "notifications@your-domain.com",
      subject: "訂單已出貨",
      text: "您的訂單 #1234 已出貨,預計 3 天內送達。"
    });
    return new Response("Email sent");
  },
};

SPF、DKIM、DMARC 全部自動配置。把 domain 加入 Cloudflare Email Service 後,系統自動設定所有必要的 DNS 記錄,不需要手動處理 email authentication——這三個縮寫困擾了無數開發者,現在 Cloudflare 把它們藏在抽象層之下。

Email Sending 加上 Email Routing(已免費提供多年),Cloudflare 現在提供了完整的雙向 Email 基礎設施:收信(Routing)+ 發信(Sending),都在同一個平台,都透過 Workers 控制,都不需要獨立的 Email 服務帳號。

Public
Beta 狀態
已全面開放申請
自動
SPF / DKIM / DMARC
配置無需手動
API 金鑰管理
原生 binding 處理

對 agent 開發者來說,最重要的意義是:以前 agent 可以透過 Email Routing 接收郵件,但回覆只能同步回覆(轉送給 Cloudflare 帳號成員),無法自由寄出到任意地址。Email Sending 的 Public Beta 打破了這個限制——現在 agent 可以真正「收一封、思考、回一封」,循環完整閉合。

Agents SDK:onEmail Hook 完整管線

Cloudflare Agents SDK 早已內建 onEmail hook,讓 agent 以 first-class 的方式接收和處理 inbound Email。Email Sending 的加入,讓整個管線真正完整:接收、處理、持久化、回覆,全部在一個 Agent class 裡。

完整 Agent Email 管線
export class SupportAgent extends Agent {
  async onEmail(email: AgentEmail) {
    const raw = await email.getRaw();
    const parsed = await PostalMime.parse(raw);

    // 持久化狀態(跨 session 存活,Durable Objects 後端)
    this.setState({
      ticket: {
        from: email.from,
        subject: parsed.subject,
        body: parsed.text,
        messageId: parsed.messageId,
      },
    });

    // 踢起非同步任務(可以花幾小時處理)
    // await this.scheduleTask(...)

    // 回覆(可以在這裡,也可以在 Queue handler 裡)
    await this.sendEmail({
      binding: this.env.EMAIL,
      from: "support@yourdomain.com",
      to: this.state.ticket.from,
      inReplyTo: this.state.ticket.messageId,
      subject: `Re: ${this.state.ticket.subject}`,
      text: "已收到您的訊息,我們將盡快處理。",
    });
  }
}

這段 code 看起來直白,但背後藏著三個關鍵設計決策:

設計 1
Address-based Routing — Email 地址即 Agent 路由 support@yourdomain.com 直接路由到 "support" agent instance。更強大的是 sub-addressingnotifications+user123@yourdomain.com 可以把 user123 作為 namespace 或 instance ID,讓同一個 Agent class 處理不同用戶的郵件串,每個用戶都有自己隔離的狀態和對話歷史。不需要在 code 裡解析路由邏輯,地址結構本身就是路由規則。
設計 2
狀態跨 Email 持久 — Durable Objects 後端 setState() 呼叫背後是 Durable Objects 的持久化存儲。Agent 記住每一封郵件的聯絡人資訊、對話歷史、處理進度,不需要獨立的資料庫。下一封來自同一地址的郵件,agent 可以取出完整上下文繼續處理——這才是真正的「對話型 agent」,而不是每次都重新開始的無狀態函數。
設計 3
HMAC-SHA256 安全回覆路由 — 防止 Header 偽造 Agent 發信並期待回覆時,可以在發出的郵件中嵌入 HMAC-SHA256 簽署的 routing headers。當對方回覆時,Email Routing 驗證 header 的簽章,確保這封回覆確實路由回發信的那個 agent instance。這防止了攻擊者偽造 reply headers 來把郵件投遞到錯誤的 instance,在多用戶環境下尤其重要。

把這三個設計放在一起,你得到的不只是「能收發 Email 的 Worker」,而是一個真正具備對話記憶、安全隔離、可長期運作的 email agent 基礎設施。

Email MCP + Wrangler CLI:任意 Agent 都能用

Email Service 不是只給部署在 Cloudflare 上的 agent 用的。現實是:大量 agent 跑在其他地方——Claude Code、Cursor、Copilot 跑在本機;生產 agent 跑在 containers 或外部雲端。Cloudflare 提供了兩個接入路徑,讓任何有工具呼叫能力的 agent 都能使用 Email Service。

🔌
Email MCP Server

透過 Cloudflare MCP server 存取 Email API,使用同一個驅動 Agent Lee 的 Codemode-powered server。任何支援 MCP 的 coding agent 都可以接入。一個典型的 prompt:「Build 完成時發通知到 hello@example.com」——agent 直接呼叫 Email MCP tool,不需要你寫任何 glue code。

⌨️
Wrangler CLI

適合有 bash 存取的 agent,或者想避免 MCP context window 開銷的場景。wrangler email send 從幾乎零 context overhead 開始,agent 按需 discover capabilities。對 bash-capable agent 來說,這是最輕量的接入方式。

Wrangler CLI — 從任何環境發送 Email
wrangler email send \
  --to "teammate@example.com" \
  --from "agent@your-domain.com" \
  --subject "Build completed" \
  --text "The build passed. Deployed to staging."

除了 MCP server 和 CLI,Cloudflare 同步發布了 Cloudflare Email Service Skill——一份給 coding agent 用的完整指引,涵蓋 Workers binding 配置、透過 REST API 發信、用 Email Routing 處理 inbound、用 Agents SDK 建構完整管線、透過 Wrangler 和 MCP 管理、以及 deliverability 最佳實踐。

Skill 的設計邏輯是:coding agent(Claude Code、Cursor 等)本身不知道怎麼正確使用 Email Service,但如果你把 Skill inject 進去,agent 就有了足夠的 context 做出正確的實作決策——包括什麼時候用 binding、什麼時候用 REST API、如何處理 bounce。

Agentic Inbox:開源的 Email Agent 參考實作

在 Private Beta 期間,Cloudflare 發現一個共同的需求:人們希望能看見 agent 在做什麼。最自然的方式是什麼?一個完整的 email client,但裡面有 agent automations 內建進去。這就是 Agentic Inbox——Cloudflare 開源的 Email Agent 參考實作。

完整的 Email Client 體驗 完整的對話串顯示與 Email 渲染,讓你看見 agent 收到了什麼、準備回覆什麼,就像使用普通 Email client 一樣直覺。
收信與附件管理 接收並儲存 Email 和附件,agent 可以讀取 PDF 發票、圖片附件、試算表——這些都是真實業務場景的必備能力。
自動回覆處理 Agent 可以自動草擬回覆,也可以在你批准後才發送。human-in-the-loop 的力度完全由你決定——全自動、全人工審核、或只審核超過某個信心門檻的案例。
內建 MCP Server Agentic Inbox 本身暴露一個 MCP server,讓外部 agent(Claude Code、Cursor 等)可以幫你草擬 Email 並送審,而不是直接發送。你在 Inbox 介面中看到草稿、審核、一鍵發送,外部 agent 完全不需要知道你的 Email credentials。
一鍵部署到 Cloudflare 完整的 deploy 到 Cloudflare 流程,30 秒內你就有一個自己的 Agentic Inbox 在跑。不需要維護 infra,不需要管理資料庫,全部跑在 Cloudflare 的 edge 上。

Agentic Inbox 的技術棧展示了 Cloudflare 自家產品的整合能力:Email Routing(inbound 收信)+ Email Sending(outbound 發信)+ Workers AI(郵件分類與摘要)+ R2(附件儲存)+ Agents SDK(有狀態的業務邏輯)。每個元件都是標準的 Cloudflare 產品,沒有引入外部依賴。

OAO Studio 觀點

Email for Agents 把「chatbot」和「agent」之間最清晰的界限說出來了:chatbot 現在回答或不回答,agent 按自己的節奏工作。收信、思考一小時、查三個系統、然後完整回覆——這才是真正能替你工作的 agent。

Email 的非同步天性剛好完美匹配 agent 的工作模式。更重要的是,Email 的「人人都有帳號」特性,讓 agent 可以直接服務你的客戶、供應商、合作夥伴——不需要他們安裝任何東西,不需要他們改變任何習慣。這是 chatbot 無法做到的滲透率。

Agentic Inbox 的 MCP server 設計尤其值得注意:它是「agent 幫你草擬、你來審核發送」的最佳實踐示範,把 human-in-the-loop 做成了產品功能,而不是妥協。

快速開始:三條路徑

根據你的使用場景,有三條不同的接入路徑:

路徑 1:Workers Binding(最快上手) wrangler.jsonc 加入 [[send_email]] binding,然後在 Worker 裡直接呼叫 env.EMAIL.send()。適合已有 Workers 的專案,想加上 Email 通知能力,5 分鐘內可以跑通。
路徑 2:Agents SDK(完整 Agent 管線) 繼承 Agent class,實作 onEmail hook 接收,呼叫 sendEmail() 回覆,用 setState() 持久化狀態,整個收發管線在一個 class 裡。適合需要對話歷史、多輪處理、非同步任務的 email agent。
路徑 3:一鍵部署 Agentic Inbox(完整參考實作) Fork Cloudflare 開源的 Agentic Inbox,一鍵部署到 Cloudflare,30 秒擁有完整 email client + agent automations + MCP server。適合想直接上生產環境或研究完整架構的場景。
wrangler.jsonc — 最簡單的 Email binding 設定
{
  "send_email": [
    {
      "name": "EMAIL",
      "destination_address": "notifications@your-domain.com"
    }
  ]
}

加上 binding 後,你的 Worker 裡就有 env.EMAIL 可用——呼叫 env.EMAIL.send() 就能發信,SPF/DKIM/DMARC 全自動處理。配合 Email Routing 設定收信規則,雙向 Email 管線就完整了。

開始使用

前往 developers.cloudflare.com/email-service 申請 Email Sending Public Beta 存取權,或直接 fork Agentic Inbox 開始探索完整的 email agent 架構。Email Routing 無需申請,在 Cloudflare 儀表板的 Email 區塊直接設定即可。

← 返回 AI 知識庫