跳转到内容
搜索文档

邮件路由

使用 wrangler dev 在本地通过模拟传入邮件测试 Email Service 路由 Workers。

最后更新 查看 MarkdownAgent 设置

使用 wrangler dev 在本地测试邮件路由行为,以模拟传入邮件,并在部署前验证你的路由逻辑。

前提条件

  1. 注册 Cloudflare 账户 ↗。
  2. 安装 Node.js ↗。

Node.js 版本管理器

使用 Volta ↗ 或 nvm ↗ 等 Node 版本管理器,以避免权限问题并切换 Node.js 版本。本指南后续将介绍的 Wrangler 需要 Node 版本 16.17.0 或更高。

配置

配置你的 Wrangler 文件:

{
	"name": "email-routing-worker",
	// Set this to today's date
	"compatibility_date": "2026-08-17",
}
name = "email-routing-worker"
# Set this to today's date
compatibility_date = "2026-08-17"

基础路由 Worker

import * as PostalMime from "postal-mime";

export default {
	async email(message, env, ctx) {
		// Parse the raw email message
		const parser = new PostalMime.default();
		const rawEmail = new Response(message.raw);
		const email = await parser.parse(await rawEmail.arrayBuffer());

		console.log("Received email:", {
			from: message.from,
			to: message.to,
			subject: email.subject,
			text: email.text,
			html: email.html,
		});

		// Route based on recipient
		if (message.to.includes("support@")) {
			await message.forward("[email protected]");
		} else {
			await message.forward("[email protected]");
		}
	},
};

测试

启动开发服务器:

npx wrangler dev

使用本地端点发送测试邮件。请求正文必须是 RFC 5322 ↗ 格式的原始邮件消息,并且该消息必须包含 Message-ID 标头:

curl --request POST 'http://localhost:8787/cdn-cgi/handler/email' \
  --url-query '[email protected]' \
  --url-query '[email protected]' \
  --data-raw 'Received: from smtp.example.com (127.0.0.1)
        by cloudflare-email.com (unknown) id 4fwwffRXOpyR
        for <[email protected]>; Tue, 27 Aug 2024 15:50:20 +0000
From: "John" <[email protected]>
Reply-To: [email protected]
To: [email protected]
Subject: Testing Email Workers Local Dev
Content-Type: text/html; charset="windows-1252"
X-Mailer: Curl
Date: Tue, 27 Aug 2024 08:49:44 -0700
Message-ID: <6114391943504294873000@ZSH-GHOSTTY>

Hi there'

这将在控制台中输出已解析的邮件结构:

{
	"headers": [
		{
			"key": "received",
			"value": "from smtp.example.com (127.0.0.1) by cloudflare-email.com (unknown) id 4fwwffRXOpyR for <[email protected]>; Tue, 27 Aug 2024 15:50:20 +0000"
		},
		{ "key": "from", "value": "\"John\" <[email protected]>" },
		{ "key": "reply-to", "value": "[email protected]" },
		{ "key": "to", "value": "[email protected]" },
		{ "key": "subject", "value": "Testing Email Workers Local Dev" },
		{ "key": "content-type", "value": "text/html; charset=\"windows-1252\"" },
		{ "key": "x-mailer", "value": "Curl" },
		{ "key": "date", "value": "Tue, 27 Aug 2024 08:49:44 -0700" },
		{
			"key": "message-id",
			"value": "<6114391943504294873000@ZSH-GHOSTTY>"
		}
	],
	"from": { "address": "[email protected]", "name": "John" },
	"to": [{ "address": "[email protected]", "name": "" }],
	"replyTo": [{ "address": "[email protected]", "name": "" }],
	"subject": "Testing Email Workers Local Dev",
	"messageId": "<6114391943504294873000@ZSH-GHOSTTY>",
	"date": "2024-08-27T15:49:44.000Z",
	"html": "Hi there\n",
	"attachments": []
}

后续步骤

这篇文档对您有帮助吗?