--- title: Cloudflare Email Worker 配置 description: 配置 Cloudflare Email Worker 来激活接收邮件功能 --- 在开始之前,你需要拥有一个 Cloudflare 账户,并且你的域名已经托管在 Cloudflare 上。 ### Email Worker 与 R2 简介 #### Email Worker Cloudflare Email Worker 是 Cloudflare 的电子邮件路由服务(Email Routing)与 Workers 平台结合提供的一项功能。它允许用户在 Cloudflare 的边缘网络中以编程方式处理接收到的电子邮件。 当邮件发送到在 Email Routing 中配置的自定义地址时,关联的 Worker 会被触发,接收邮件数据(例如发件人、收件人、头部、正文等)。 开发者可以编写 JavaScript 代码来定义自定义逻辑,比如将邮件转发到指定地址、过滤垃圾邮件,或与外部 API 集成。 #### Cloudflare R2 Cloudflare R2 是一款可扩展的、兼容 S3 的对象存储解决方案。它允许用户在边缘存储和读取文件(如电子邮件附件),并且没有出口流量费用。 在邮件 Worker 的上下文中,R2 可用于存储邮件附件或其他数据,并可通过环境绑定在 Worker 脚本中访问。 ### cf-email-forwarding-worker 概述 仓库:[oiov/cf-email-forwarding-worker](https://github.com/oiov/cf-email-forwarding-worker) 使用 Cloudflare Email Worker 和 R2 实现了一个高级的邮件转发解决方案。核心功能是将邮件数据通过 HTTP POST 请求发送到第三方 API 接口进行自定义处理。 此外,还利用 Cloudflare R2 来存储邮件附件,并使第三方应用可访问。 #### 主要特性 - **基于 API 的转发**:邮件以结构化数据的形式通过 POST 请求发送到可配置的第三方 API(`APP_API_URL` 环境变量)。 - **附件存储**:邮件附件上传到 R2 存储桶,并将其 URL 包含在 API 请求中。 - **高度可定制**:第三方应用可根据需要处理邮件数据(如发件人、主题、正文、附件等)。 #### 配置说明 Worker 依赖 `wrangler.jsonc` 文件中定义的两个环境变量: ```json "vars": { "APP_API_URL": "https://wr.do/api/v1/email-catcher" }, "r2_buckets": [ { "binding": "R2_BUCKET", "bucket_name": "wremail" } ] ```` * `APP_API_URL`:接收邮件数据的第三方 API 地址。可以让第三方应用自定义处理邮件内容(如记录日志、进一步处理或转发)。 * `R2_BUCKET`:R2 存储桶的绑定名,在 Worker 代码中可通过 `env.R2_BUCKET` 访问。 其中 `bucket_name`(如 `wremail`)指的是你在 Cloudflare 中预先创建的 R2 存储桶名称。 #### 工作原理 1. **接收邮件**:当邮件发送到配置的地址时,Worker 被触发。 2. **处理附件**:若邮件包含附件,则提取并上传到 R2 存储桶(如 wremail),并生成可访问的 URL。 3. **转发邮件数据**:将邮件数据(发件人、收件人、主题、正文、附件链接等)封装为 JSON,发送到 `APP_API_URL`。 4. **第三方处理**:第三方应用接收并根据自身逻辑处理这些数据。 #### 使用示例 * 用户向 [example@yourdomain.com](mailto:example@yourdomain.com) 发送邮件; * Worker 将附件上传至刚才创建的存储桶; * Worker 向 [https://wr.do/api/v1/email-catcher](https://wr.do/api/v1/email-catcher) 发送包含邮件信息的 POST 请求; * 第三方应用接收数据,并进行记录、存入数据库或转发。 #### 前置条件 * 一个启用了 Email Routing 的 Cloudflare 账户; * 已创建并绑定到 Worker 的 R2 存储桶(如 wremail); * 一个已准备好接收 POST 请求的第三方 API 接口。 ### 部署 Email Worker 到 Cloudflare ```bash git clone https://github.com/oiov/cf-email-forwarding-worker.git cd cf-email-forwarding-worker pnpm install wrangler login wrangler deploy ``` 在部署前,记得在 `wrangler.jsonc` 中添加你的环境变量。 ### 配置你的域名邮箱规则 访问: ```bash https://dash.cloudflare.com/[account_id]/[zone_name]/email/routing/routes ``` 编辑 `Catch-all address`,选择: * `Action` -> `Send to a worker` * `Destination` -> `wrdo-email-worker`(你部署的 Worker 名称) 然后保存并启用。 每当你添加一个新域名时,都需要执行相同操作。