SaaS 应用的 Email API(2026):用 Rovela 发送注册验证码、邀请与收据
把 Rovela 当作 SaaS 产品的 Email API:注册验证码、团队邀请、收据与试用提醒,服务端密钥,并按用户动作做幂等。
给 SaaS 产品用的 Email API,不是通讯工具
SaaS 一旦有用户,就会固定地发出一批事务邮件:邮箱验证、团队邀请、试用到期提醒、收据、安全通知。面向 SaaS 的 Email API,就是这些事件去调用的 HTTP 服务,让产品不必自己跑邮件服务器,也不必把登录验证码和营销工具的联系人名单混在一起。
本文讲如何在多租户应用里,把这些产品邮件接到 Rovela。它不是AI 应用的事务邮件(智能体与生成式工作流),不是用邮件 API 发送验证码那样的验证码深挖,也不是单独的用模板发送欢迎邮件或团队邀请邮件链接。品类定义见事务邮件 API。
可以从Email API产品页、快速开始、发送邮件 API和身份认证入手。 具体例子:验证码、欢迎模板、模板 API。
本系列相关产品指南:
- 事务邮件 API
- HTTP 邮件 API
- 从 SMTP 迁到 Email API
- 用 curl 发送邮件
- 事务邮件 API + 托管邮箱
- 入站与出站 Email API
- 邮件发送 API
- 邮件通知 API
- Email API 集成
- 批量事务邮件 API
- 事务邮件 Webhook
- 简单的事务邮件 API
- 从应用发送事务邮件
- 已验证域名的 Email API
SaaS 的那一组信
把产品事件映射到发送,并为每一封准备自己的幂等键:
| 事件 | 邮件 | 稳定的 Idempotency-Key | 文档 / 延伸阅读 |
|---|---|---|---|
| 注册 | 6 位验证码或确认链接 | signup-otp:${userId}:${codeId} | 验证码示例,用邮件 API 发送验证码 |
| 首次会话 | 欢迎信 | welcome:${userId} | 欢迎模板,用模板发送欢迎邮件 |
| 邀请同事 | 接受链接 | invite:${teamId}:${inviteId} | 团队邀请邮件链接 |
| 结账 | 收据 + 可选 PDF | invoice:${invoiceId} | 发票附件,电商订单邮件 |
| 忘记密码 | 重置链接 | password-reset:${userId}:${tokenId} | 密码重置,安全的密码重置邮件 |
| 试用窗口 | 个性化提醒 | trial-end:${accountId}:${yyyy-mm-dd} | 批量与定时,批量事务邮件 API |
面向分段的产品通讯不在这张表里——请用广播,并与事务邮件分开(事务邮件与营销邮件)。
能撑住多租户的做法
- 每个品牌一个已验证发信域名(或子域)。 未验证的
from会被拒绝。Key 还可以限制在单个域名,当你在一个组织里替多个客户发信时很重要(身份认证,已验证域名的 Email API)。 - 热路径只用
sending_access。 Web 进程、Worker 拿发信 Key。读信、管理模板、注册 webhook 用单独的full_access(或 Dashboard),不要放进热路径。 - 文案会改的用模板,秘密放在代码里。 欢迎信和收据常用
{ id, variables },改错别字不必发版(模板指南,邮件模板 API 指南)。一次性验证码和重置 URL 应在应用内生成再传入正文或变量——不要作为长期秘密写进共享模板。 - 批量用在提醒上,不要用在注册验证码上。 每晚「试用还有 3 天到期」适合
POST /emails/batch(最多 100 封个性化消息,且 batch 端点不接受template/topic_id)。注册 OTP 应各走一次POST /emails,并用「每一次尝试」的幂等键。
curl -X POST https://api.rovela.dev/emails \
-H "Authorization: Bearer re_your_sending_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: verify-signup-8f3a2c" \
-d '{
"from": "Acme <no-reply@yourdomain.com>",
"to": "alice@example.com",
"subject": "Your Acme code: 482913",
"html": "<p>Your verification code is</p><p style=\"font-size:28px;letter-spacing:6px\"><b>482913</b></p><p>It expires in 10 minutes.</p>",
"text": "Your verification code is 482913. It expires in 10 minutes."
}'
值得写对的多租户细节
- 把租户放进幂等键和
tags。 Key 的作用域是你的账号,不会自动按租户隔离;trial-end:${tenantId}:${day}避免两个客户在同一重试窗口被折叠(邮件 API 的幂等键)。 - 若需要人来回复邀请或账单问题,把
reply_to指到真实邮箱。 同一域名上的托管收件箱见事务邮件 API + 托管邮箱;入站解析见入站与出站 Email API。 - 额度按收件人计。 「密送账号所有者和账单邮箱」的收据会扣两次额度,且两者都计入该封 50 人上限(发送邮件 API)。
- 登录邮箱的退信必须在你自己的用户记录里抑制重试,不能只看 Rovela 日志。请订阅
email.bounced和email.complained(事务邮件 Webhook)。
FAQ
所有租户共用一个 Rovela 账号可以吗? 可以,而且这是常见做法。若租户自带发信域名,使用域名受限的 Key;并始终把租户 id 放进幂等键和 tags。
试用提醒该走营销广播吗? 如果每封都是同一封通讯、并且需要名单退订,用广播。如果每封都是「你的试用周四结束」这种个性化事务,走事务批量(批量事务邮件 API)。
SaaS 和 AI 功能需要两家供应商吗? 不必。同一条 POST /emails 就够;AI 应用的事务邮件只是 AI 形态的用例。
典型 SaaS 里 API Key 放哪? 放在后端环境变量或密钥管理里,注入 web 进程和 Worker——不要放进 SPA 或移动应用(Email API 集成,从应用发送事务邮件)。
先把产品邮件做对
验证、邀请、收据和提醒是 SaaS 省不掉的邮件。让这些事件指向 Rovela 的 Email API,隔离 sending_access,并为每个用户动作准备稳定的幂等键。模板、批量、webhook、邮箱这些能力,等你需要时再接入即可。