跳转到内容
搜索文档

路由邮件

Set up email routing to forward incoming emails to existing mailboxes or process them with Workers.

最后更新 查看 MarkdownAgent 设置

将发送到你域名的传入邮件路由到现有邮箱、用于处理的 Workers,或其他目标。

设置你的域名

在使用 Email Routing 之前,请配置您的域名。

  1. 在 Cloudflare 仪表板中,转到 Compute(计算) > Email Service(电子邮件服务) > Email Routing

    Go to Email Routing ↗
  2. 选择 Onboard Domain(接入域名)

  3. 从您的 Cloudflare 账户中选择一个域名。可以选择查看 Cloudflare 将添加到您的根域名的 DNS 记录:

    • 用于将传入电子邮件路由到 Cloudflare 的 MX 记录。
    • 用于 SPF 的 TXT 记录,以授权电子邮件路由。
    • 用于 DKIM 的 TXT 记录,以为路由的电子邮件提供身份验证。
  4. 选择 Done(完成)

域名添加成功后,您就可以开始路由电子邮件了。

路由你的第一封邮件

你可以通过在仪表板中设置路由规则,或使用 Workers 处理邮件,来路由第一封邮件。

最简单的邮件路由方式是将其转发到现有电子邮件地址。

添加目标地址

在创建路由规则之前,请添加并验证将接收转发邮件的目标地址。目标地址在账户级别管理,可在多个域名之间复用。

  1. 在 Cloudflare 仪表板中,前往 Compute(计算) > Email Service(电子邮件服务) > Email Routing(电子邮件路由) > Destination Addresses

    Go to Email Routing ↗
  2. Destination addresses(目标地址) 下,在内联表单中输入要用作目标的电子邮件地址并提交。

  3. 打开 Cloudflare 发送到该地址的验证邮件,并选择 Verify email address(验证电子邮件地址)

完整详情请参阅添加目标地址

创建路由规则

  1. 在 Cloudflare 仪表板中,前往 Compute(计算) > Email Service(电子邮件服务) > Email Routing(电子邮件路由)

    Go to Email Routing ↗
  2. 选择要创建电子邮件地址的域名。

  3. 选择 Routing Rules(路由规则) 选项卡。

  4. 选择 Create routing rule(创建路由规则)

  5. 配置你的第一条规则(例如,将发送到 support@yourdomain.com 的邮件转发到你的个人邮箱):

    • Email pattern(电子邮件模式):输入邮件的本地部分(例如 support@yourdomain.comsupport),并选择你的域名
    • Action(操作)Send to an email(发送到电子邮件)
    • Destination(目标):你的个人电子邮件地址(例如 your-email@gmail.com
  6. 选择 Save(保存)

测试路由规则

验证路由规则是否生效:

  1. 从另一个电子邮件账户向新创建的地址(例如 support@yourdomain.com)发送邮件。请从与目标地址不同的账户发送。某些提供商会丢弃看起来来自同一账户又投递给该账户的邮件。

  2. 检查目标收件箱中的转发邮件。

  3. 若未立即看到邮件,请检查垃圾邮件文件夹。

使用 Workers 在转发或回复前,以自定义逻辑处理邮件。

创建邮件处理 Worker

  1. 创建新的 Worker 项目:

    npm create cloudflare@latest email-processor

    提示时,选择 "Hello World" Worker 作为模板。然后进入项目目录:

    cd email-processor
  2. 安装用于创建邮件回复的所需软件包:

    npm install mimetext
  3. 在 Wrangler 配置文件中添加 nodejs_compat 兼容性标志。mimetext 软件包需要此标志:

    {
    	"compatibility_flags": ["nodejs_compat"],
    }
    compatibility_flags = [ "nodejs_compat" ]
  4. src/index.ts 中创建邮件处理程序:

    import { EmailMessage } from "cloudflare:email";
    import { createMimeMessage } from "mimetext";
    
    // ============================================
    // Configuration - Update these values
    // ============================================
    const YOUR_DOMAIN = "yourdomain.com"; // Replace with your verified domain
    const FORWARD_TO_EMAIL = "your-team@example.com"; // Replace with where you want emails forwarded
    
    export default {
    	async email(message, env, ctx): Promise<void> {
    		const sender = message.from;
    		const recipient = message.to;
    		const subject = message.headers.get("subject") || "";
    
    		console.log(
    			`Processing email from ${sender} to ${recipient} with subject ${subject}`,
    		);
    
    		// Route based on recipient
    		if (recipient.includes("support@")) {
    			// Send auto-reply
    			const msg = createMimeMessage();
    			const messageId = message.headers.get("Message-ID");
    			if (messageId) {
    				msg.setHeader("In-Reply-To", messageId);
    				msg.setHeader("References", messageId);
    			}
    			msg.setSender({
    				name: "Support Team",
    				addr: `support@${YOUR_DOMAIN}`,
    			});
    			msg.setRecipient(message.from);
    			msg.setSubject(`Re: ${subject}`);
    
    			// Add plain text version
    			msg.addMessage({
    				contentType: "text/plain",
    				data: "Thank you for contacting support. Your ticket number is 123.\n\nA member of our support team will get back to you shortly.",
    			});
    
    			// Add HTML version
    			msg.addMessage({
    				contentType: "text/html",
    				data: "<p>Thank you for contacting support. Your ticket number is <strong>123</strong>.</p><p>A member of our support team will get back to you shortly.</p>",
    			});
    
    			const replyMessage = new EmailMessage(
    				`support@${YOUR_DOMAIN}`,
    				message.from,
    				msg.asRaw(),
    			);
    
    			await message.reply(replyMessage);
    
    			// Forward to support team
    			await message.forward(FORWARD_TO_EMAIL);
    		} else {
    			// Default: forward to admin
    			await message.forward(FORWARD_TO_EMAIL);
    		}
    	},
    } satisfies ExportedHandler<Env>;
  5. 部署 Worker:

    npm run deploy

配置到 Worker 的路由

  1. 在 Cloudflare 仪表板中,前往 Compute(计算) > Email Service(电子邮件服务) > Email Routing(电子邮件路由)

    Go to Email Routing ↗
  2. 选择要配置路由的域名。

  3. 选择 Routing Rules(路由规则) 选项卡。

  4. 选择 Create routing rule(创建路由规则)

  5. 配置 Worker 路由:

    • Email pattern(电子邮件模式):输入邮件的本地部分(例如 support@yourdomain.comsupport),并选择你的域名
    • Action(操作)Send to a Worker(发送到 Worker)
    • Worker:选择你的 email-processor Worker
  6. 选择 Save(保存)

测试邮件路由

配置路由规则后,测试其是否生效:

  1. 从你的个人电子邮件账户向已配置的地址(例如 support@yourdomain.com)发送邮件。

  2. 检查 FORWARD_TO_EMAIL 收件箱中的转发邮件。

  3. 若收件人邮箱为 support@,你还应在个人邮箱中收到自动回复。

后续步骤

现在你可以路由邮件,可进一步探索高级功能:

这篇文档对您有帮助吗?