在本教程中,你将学习如何从 Workers 使用 Resend ↗ 发送事务性邮件。完成本教程后,你将能够:
- 创建用于发送邮件的 Worker。
- 注册 Resend 并将 Cloudflare 域名添加到 Resend。
- 从 Worker 使用 Resend 发送邮件。
- 使用 secrets 安全存储 API 密钥。
要继续本教程,你需要:
- Cloudflare 账户 ↗(如尚未拥有)。
- 已注册的域名。
- 已安装 npm ↗。
- Resend 账户 ↗。
首先,使用 C3 在命令行中创建 Worker 项目,然后根据提示操作:
npm create cloudflare@latest或者,你可以使用 CLI 参数加快流程:
npm create cloudflare@latest email-with-resend -- --type=hello-world --ts=false --git=true --deploy=false这将创建一个简单的 hello-world Worker,内容如下:
export default {
async fetch(request, env, ctx) {
return new Response("Hello World!");
},
};如果还没有 Resend 账户,可以在此免费注册 ↗。注册后,通过侧边菜单前往 Domains,点击按钮添加新域名。在弹窗中输入要添加的域名,然后选择区域。
接下来,你会看到需要添加到 Cloudflare 域名的 DNS 记录列表。在 Cloudflare 仪表板中,选择之前输入的域名,前往 DNS > Records。将 Resend 提供的 DNS 记录(DKIM、SPF 和 DMARC 记录)复制/粘贴到你的 Cloudflare 域名。
完成后,返回 Resend 并点击 Verify DNS Records 按钮。如果所有记录配置正确,域名状态应更新为 Verified。
最后,通过侧边菜单前往 API Keys 创建 API 密钥。为密钥指定描述性名称和适当权限。点击按钮添加密钥,然后将 API 密钥复制到安全位置。
最后一步是在 Worker 中整合所有内容。在之前创建的 Worker 目录中打开终端,然后安装 Resend SDK:
npm i resend在 Worker 中,按如下方式导入并使用 Resend 库:
import { Resend } from "resend";
export default {
async fetch(request, env, ctx) {
const resend = new Resend("your_resend_api_key");
const { data, error } = await resend.emails.send({
from: "hello@example.com",
to: "someone@example.com",
subject: "Hello World",
html: "<p>Hello from Workers</p>",
});
return Response.json({ data, error });
},
};要在本地测试代码,运行以下命令并在浏览器中访问 http://localhost:8787/ ↗:
npm start使用 npm run deploy 部署 Worker。
API 密钥和令牌等敏感信息应始终存储在 secrets 中。所有 secrets 均经过加密,提供额外保护层。因此,建议将 API 密钥移至 secret,并从 Worker 环境中访问。
要为本地开发添加 secrets,创建 .dev.vars 文件,其用法与 .env 文件完全相同:
RESEND_API_KEY=your_resend_api_key还要通过运行以下命令确保 secret 已添加到已部署的 Worker:
npx wrangler secret put RESEND_API_KEY添加的 secret 可通过传递给 Worker fetch 事件处理程序的 env 参数访问:
import { Resend } from "resend";
export default {
async fetch(request, env, ctx) {
const resend = new Resend(env.RESEND_API_KEY);
const { data, error } = await resend.emails.send({
from: "hello@example.com",
to: "someone@example.com",
subject: "Hello World",
html: "<p>Hello from Workers</p>",
});
return Response.json({ data, error });
},
};最后,使用 npm run deploy 部署此更新。