跳转到内容
搜索文档

使用 Resend 发送邮件

最后更新 查看 MarkdownAgent 设置

在本教程中,你将学习如何从 Workers 使用 Resend 发送事务性邮件。完成本教程后,你将能够:

  • 创建用于发送邮件的 Worker。
  • 注册 Resend 并将 Cloudflare 域名添加到 Resend。
  • 从 Worker 使用 Resend 发送邮件。
  • 使用 secrets 安全存储 API 密钥。

前提条件

要继续本教程,你需要:

创建 Worker 项目

首先,使用 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

如果还没有 Resend 账户,可以在此免费注册。注册后,通过侧边菜单前往 Domains,点击按钮添加新域名。在弹窗中输入要添加的域名,然后选择区域。

接下来,你会看到需要添加到 Cloudflare 域名的 DNS 记录列表。在 Cloudflare 仪表板中,选择之前输入的域名,前往 DNS > Records。将 Resend 提供的 DNS 记录(DKIM、SPF 和 DMARC 记录)复制/粘贴到你的 Cloudflare 域名。

向 Cloudflare 域名添加 DNS 记录的示意图

完成后,返回 Resend 并点击 Verify DNS Records 按钮。如果所有记录配置正确,域名状态应更新为 Verified

Resend 仪表板上的域名验证示意图

最后,通过侧边菜单前往 API Keys 创建 API 密钥。为密钥指定描述性名称和适当权限。点击按钮添加密钥,然后将 API 密钥复制到安全位置。

从 Worker 发送邮件

最后一步是在 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

API 密钥和令牌等敏感信息应始终存储在 secrets 中。所有 secrets 均经过加密,提供额外保护层。因此,建议将 API 密钥移至 secret,并从 Worker 环境中访问。

要为本地开发添加 secrets,创建 .dev.vars 文件,其用法与 .env 文件完全相同:

RESEND_API_KEY=your_resend_api_key

还要通过运行以下命令确保 secret 已添加到已部署的 Worker:

Add secret to deployed Workersh
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 部署此更新。

相关资源

这篇文档对您有帮助吗?