配置 Resend
为 Saavo 配置 Resend、发送邮件的域名和 API Key,让生产环境可以发送注册验证、密码重置等系统邮件。
Saavo 默认使用 Resend 发送注册验证、密码重置和账号安全提醒等系统邮件。本地开发时,邮件内容只会显示在终端里;部署到 Cloudflare 后,项目才会调用 Resend 真正发送邮件。
开始前需要准备:
- 一个已经接入 Cloudflare DNS 的域名;
- 一个可以长期使用的 Resend 账号;
- 一个能够接收用户回复的客服邮箱。
域名尚未接入 Cloudflare 时,先完成域名配置。网站是否已经绑定 Custom Domain 不影响 Resend 验证,只要当前域名确实由 Cloudflare 管理即可。
先确定两个邮箱地址
本文继续使用 webpagetopdf.dev 作为示例,并将邮件发送和邮件接收分开配置:
| 地址 | 用途 | 是否需要真实邮箱 |
|---|---|---|
send@mail.webpagetopdf.dev | 系统邮件中显示的发件人地址 | 不需要单独创建邮箱 |
support@webpagetopdf.dev | 接收用户回复,也是网站上的客服邮箱 | 必须能够正常接收邮件 |
Resend 验证的是 mail.webpagetopdf.dev 这个子域名。验证通过后,可以使用 send@mail.webpagetopdf.dev、account@mail.webpagetopdf.dev 等地址发送邮件,不需要提前创建这些邮箱。
客服邮箱不同。Saavo 会把 supportEmail 写入邮件的 Reply-To,用户点击“回复”后,邮件会发到这个地址,因此它必须具备接收能力。可以使用 Cloudflare Email Routing,将 support@webpagetopdf.dev 转发到自己常用的邮箱。
发送和接收可以使用不同服务
mail.webpagetopdf.dev 交给 Resend 发送系统邮件,support@webpagetopdf.dev 通过 Cloudflare Email Routing 接收用户回复。两者位于不同的名称下,不会互相覆盖,也不需要在根域名上重复添加两套 MX 记录。
注册 Resend
创建账号
打开 Resend 注册页面。可以使用 Google、GitHub,也可以使用邮箱和密码注册。选择自己能够长期管理的登录方式,并按页面提示完成邮箱验证。

团队项目不要多人共用同一个账号。注册完成后,应当在 Resend 中邀请成员加入同一个 Team,后续才能分别撤销权限。
进入控制台
登录后会进入 Send your first email 页面。左侧的 Domains 用来验证发送邮件的域名,API keys 用来创建项目需要的密钥。

首页提供的测试地址适合确认账号可以调用 API,但不能代替正式域名验证。Saavo 要向真实用户发送邮件,还要继续完成下面的配置。
验证发送邮件的域名
填写子域名
在 Name 中填写:
mail.webpagetopdf.dev
这里填写的是域名,不是邮箱地址,不要写成 send@mail.webpagetopdf.dev,也不要添加 https:// 或路径。
没有明确的区域或合规要求时,可以保持 Advanced options 中的默认设置。Resend 会根据当前设置生成对应的 DNS 记录,后面应以页面实际显示的内容为准,不要照抄教程截图中的记录值。
确认域名无误后,点击 Add domain。
选择自动配置 DNS
域名添加成功后,Resend 会进入 DNS Records。由于本文的域名由 Cloudflare 管理,点击 Auto configure。

如果没有出现自动配置入口,或者不希望授权 Resend 写入 DNS,可以选择 Manual setup,按照页面列出的类型、名称和值到 Cloudflare DNS → Records 中逐条添加。
授权写入 DNS 记录
Cloudflare 会列出 Resend 准备添加的记录。确认页面中的域名是 mail.webpagetopdf.dev,并核对记录均为 DNS only,然后点击 Authorize。

这是一次性授权,只允许写入当前页面列出的记录,不代表 Resend 以后可以随意修改整个域名。截图中的记录内容已做模糊处理,实际配置必须使用自己页面生成的值。
等待 Resend 检查
授权完成后会回到域名详情页。状态显示 Pending、进度停留在 Checking DNS 时,表示记录已经提交,Resend 正在等待 DNS 生效。

这时不要反复删除域名或重新授权。可以先到 Cloudflare DNS → Records 中确认记录已经出现,再等待 Resend 继续检查。
确认验证成功
返回 Domains,看到 mail.webpagetopdf.dev 的状态变成 Verified,说明当前 Resend 账号已经可以使用这个子域名发送邮件。

域名验证成功还不代表 Saavo 已经完成配置。接下来还需要创建 API Key,并把发件人地址和密钥写入项目。
需要手动添加 DNS 时
选择 Manual setup 后,同时打开 Resend 的域名详情和 Cloudflare 的 DNS → Records,按 Resend 给出的列表逐条添加 MX、TXT 或 CNAME 记录:
- 类型、名称、内容和优先级必须与 Resend 页面一致;
- TTL 保持 Auto 即可;
- 支持代理的记录保持 DNS only;
- Cloudflare 的 Name 通常填写相对于根域名的部分,以输入框最终显示的完整域名为准;
- DNS 中已经存在同名记录时,先确认它属于哪个服务,不要直接删除,也不要把两条 SPF 内容自行合并。
全部保存后回到 Resend,重新发起验证。
留意被重复补全的域名
Cloudflare 会在部分输入框后自动补上根域名。保存前检查最终名称,避免把 mail.webpagetopdf.dev 写成 mail.webpagetopdf.dev.webpagetopdf.dev。自动配置流程通常不会出现这个问题。
创建 API Key
限制密钥权限
名称填写容易识别用途的内容,例如 email sender 或 webpagetopdf-production。Permission 选择 Sending access,Domain 选择刚刚验证的 mail.webpagetopdf.dev,然后点击 Add。

Saavo 发送邮件不需要 Full access。将密钥限制在指定域名后,即使以后同一个 Resend 账号又添加了其他域名,这个项目也不能使用它们发送邮件。
立即保存密钥
创建后,Resend 会显示完整的 API Key。点击复制按钮,将它保存到密码管理器或稍后要填写的 .env.production。

完整密钥只显示一次。确认已经保存后再点击 Done,不要把它放进浏览器代码、截图、聊天记录或 Git 仓库。
密钥泄露后应立即撤销
如果 API Key 曾经出现在公开仓库、截图或聊天记录中,应立即回到 Resend 撤销并重新创建。只从文件中删除,不能阻止已经拿到密钥的人继续使用。
配置 Saavo
先确认项目选择的邮件服务是 Resend。默认模板已经这样配置:
emailProvider: {
type: 'resend',
},发件人名称、发件人地址和客服邮箱位于 config/base.ts:
fromEmailAddress: {
name: 'Webpage to PDF',
email: 'send@mail.webpagetopdf.dev',
},
supportEmail: 'support@webpagetopdf.dev',fromEmailAddress.email 必须属于刚刚验证的准确域名。验证的是 mail.webpagetopdf.dev,就不能把发件人写成 send@webpagetopdf.dev。
还没有进行首次部署
运行:
npm run deploy:init部署过程中会依次询问:
Email sender address
Support email address
Resend API key分别填写:
send@mail.webpagetopdf.dev
support@webpagetopdf.dev
刚创建的 Resend API Key部署脚本会把两个邮箱地址更新到 config/base.ts,并把 API Key 保存到 .env.production。fromEmailAddress.name 不在交互中修改,正式部署前还要打开 config/base.ts,确认它已经是当前产品名称。
项目已经部署过
先修改 config/base.ts 中的发件人名称、发件人地址和客服邮箱,再将密钥写入 .env.production:
RESEND_API_KEY="你的 Resend API Key"然后运行:
npm run doctor
npm run deploy:update不要只在 Cloudflare Dashboard 中手动添加 Secret。Saavo 后续部署仍以 .env.production 为准,只修改远程环境会让本地记录和实际部署状态不一致。
本地开发不会真正发送邮件
npm run dev 会在终端输出 [DEV EMAIL PREVIEW],不会请求 Resend。本地 .env 可以让 RESEND_API_KEY 保持空白,生产密钥只保存到 .env.production。
发送一封真实邮件
部署完成后,到正式环境做一次完整验证:
- 使用一个能够接收邮件的地址注册账号,或者发起一次密码重置;
- 检查收件箱和垃圾邮件目录;
- 打开 Resend 的 Emails,确认对应邮件已经出现;
- 进入邮件详情,检查发送状态;
- 确认邮件中的 From 是
send@mail.webpagetopdf.dev,Reply-To 是support@webpagetopdf.dev; - 直接回复测试邮件,确认客服邮箱确实能够收到。
域名显示 Verified 只能说明 Resend 接受这个发送域名,不能证明项目配置、生产密钥和客服邮箱都正确。以上流程全部通过后,邮件配置才算完成。

