← 返回博客

SaaS 应用的 Email API(2026):用 Rovela 发送注册验证码、邀请与收据

把 Rovela 当作 SaaS 产品的 Email API:注册验证码、团队邀请、收据与试用提醒,服务端密钥,并按用户动作做幂等。

更新于 2026年11月10日
SaaS 应用的 Email API(2026):用 Rovela 发送注册验证码、邀请与收据

给 SaaS 产品用的 Email API,不是通讯工具

SaaS 一旦有用户,就会固定地发出一批事务邮件:邮箱验证、团队邀请、试用到期提醒、收据、安全通知。面向 SaaS 的 Email API,就是这些事件去调用的 HTTP 服务,让产品不必自己跑邮件服务器,也不必把登录验证码和营销工具的联系人名单混在一起。

本文讲如何在多租户应用里,把这些产品邮件接到 Rovela。它不是AI 应用的事务邮件(智能体与生成式工作流),不是用邮件 API 发送验证码那样的验证码深挖,也不是单独的用模板发送欢迎邮件或团队邀请邮件链接。品类定义见事务邮件 API。

可以从Email API产品页、快速开始、发送邮件 API和身份认证入手。 具体例子:验证码、欢迎模板、模板 API。

本系列相关产品指南:

SaaS 的那一组信

把产品事件映射到发送,并为每一封准备自己的幂等键:

事件邮件稳定的 Idempotency-Key文档 / 延伸阅读
注册6 位验证码或确认链接signup-otp:${userId}:${codeId}验证码示例,用邮件 API 发送验证码
首次会话欢迎信welcome:${userId}欢迎模板,用模板发送欢迎邮件
邀请同事接受链接invite:${teamId}:${inviteId}团队邀请邮件链接
结账收据 + 可选 PDFinvoice:${invoiceId}发票附件,电商订单邮件
忘记密码重置链接password-reset:${userId}:${tokenId}密码重置,安全的密码重置邮件
试用窗口个性化提醒trial-end:${accountId}:${yyyy-mm-dd}批量与定时,批量事务邮件 API

面向分段的产品通讯不在这张表里——请用广播,并与事务邮件分开(事务邮件与营销邮件)。

能撑住多租户的做法

  1. 每个品牌一个已验证发信域名(或子域)。 未验证的 from 会被拒绝。Key 还可以限制在单个域名,当你在一个组织里替多个客户发信时很重要(身份认证,已验证域名的 Email API)。
  2. 热路径只用 sending_access。 Web 进程、Worker 拿发信 Key。读信、管理模板、注册 webhook 用单独的 full_access(或 Dashboard),不要放进热路径。
  3. 文案会改的用模板,秘密放在代码里。 欢迎信和收据常用 { id, variables },改错别字不必发版(模板指南,邮件模板 API 指南)。一次性验证码和重置 URL 应在应用内生成再传入正文或变量——不要作为长期秘密写进共享模板。
  4. 批量用在提醒上,不要用在注册验证码上。 每晚「试用还有 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、邮箱这些能力,等你需要时再接入即可。