Relay API设计:用Cloudflare Workers构建邮件发送基础

本页面由日语原文机器翻译而成。 阅读日语原文

1。 为什么没有使用外部邮件提供商的API

制作通过电子邮件发送备忘录的应用程序时,首先想到的是大型邮件提供商的发送API。 但是,对于个人开发者来说,Google OAuth审查的门槛非常高。

Google OAuth未通过审查的应用程序会显示“此应用程序未在Google上确认”的警告画面。 对于备忘录应用程序来说,这个警告是致命的。 用户将自己的想法和个人信息作为备忘录发送。 如果第一次体验显示“未经验证”,谁会信任这个应用程序呢?

Google OAuth审查的申请过程,对于个人开发者来说是一条艰难的道路。 隐私政策的准备、范围的正当性说明、安全评估——对于大公司的团队来说,对于一个人开发的应用程序来说,为了邮件发送这一单一功能而支付的成本太大了。

需要的是,没有OAuth审查的复杂性,在不损害用户信任的情况下可以发送邮件的解决方案。 答案是自己的Relay API。

2。 Cloudflare Workers + Resend API架构

Relay API的架构既简单又坚固。 收到来自iOS应用程序的请求,转播到邮件发送服务——这是专门设计。

iOS应用程序 → 继电器API(Cloudflare工人) → Resend API → 电子邮件发送

Cloudflare Workers是在全世界的边缘位置执行TypeScript代码的无服务器平台。 在Cloudflare的说明中,因为在名为isolate的轻度执行环境中运行代码,所以没有虚拟机型的无服务器发生的冷启动。

Resend API是现代邮件发送服务。 SPF/DKIM/DMARC易于设置,可以从TypeScript轻松调用。

在费用方面,Cloudflare Workers的免费计划可以使用到1日100000请求,Resend的免费计划可以使用1日100通·月3,000通(2026年10月时点各公司的收费页面)。 从小开始,根据发送量转为收费方案的构成。

3。 邮箱地址验证(6数字代码方式)

Relay API只向已验证的邮箱地址发送备忘录。 这是防止滥用的最基本的防御层。

在开始发送备忘录之前,需要验证发送地址的邮箱地址。

  • 用户在应用程序中输入邮箱地址
  • Relay API将6位数的验证码发送到该地址
  • 将用户收到的6数字代码输入应用程序
  • 验证完成。 之后,允许向该邮箱地址发送备忘录

通过这个机制,防止擅自向他人的邮箱发送备忘录。 验证码会发送到该地址的收件箱,所以看不到收件箱的人,无法确认该地址作为发送地址。

每个邮箱地址只验证一次。 一旦验证完成,以后无需输入代码就可以继续发送备忘录。

4。 多层速率限制的实施

为了防止邮件发送API的滥用,在多个层中实施了速率限制。

const RATE_LIMITS = {
  devicePerMinute: 30,
  devicePerDay: 200,
  ipPerHour: 120,
  globalPerDay: 300,
};
设备级别
设备单位的限制
防止1台设备过度发送。 设置每1分钟30件,1每天200件的上限。 虽然是正常使用备忘录无法达到的阈值,但是通过自动化停止大量发送。
IP级别
IP地址单位的限制
限制来自同一网络的大量请求。 1每小时120件。 保护基础设施免受使用多个设备的攻击。
全球
全球限制
基础设施整体的保护。 1每天300件的全球上限,作为最后的制止(每个上限的数值是设计时的,可能会发生变化)。
2026-09 补充
现在的上限
每个终端的上限和整体1天的上限,在2026年6月拆除了。 现在的发送上限是每个IP地址的1小时的上限。

计数器保存在Cloudflare KV中,每个时间窗口都会重置。 在通过正常的发送的同时,抑制了不正当的大量访问。

5。 幂等性:为了不重复发送相同的备忘录而设计

网络通信必然存在不确定性。 从按下发送按钮到回复之间,通信可能会中断。 应用程序判断为超时,尝试重新发送,但实际上第一个请求已经到达了服务器——这是常见的场景。

在这个场景中,用幂等性(idempotency)来准备。

  • 给每个备忘录赋予唯一的UUID(信息ID)
  • Relay API将该消息ID作为邮件发送服务(Resend)要求的幂等键(Idempotency-Key)传递
  • Resend记住了相同的按键24时间,如果再次收到相同内容的请求,不发送邮件而是返回与之前相同的回复
  • 应用程序会返回成功的响应(2次也与1次相同的响应)

通过这种设计,即使网络不稳定而发生重试,在24时间内也不会重复发送相同的备忘录(Resend记住按键的期间)。 因为无法分辨之后的重新发送,所以在此期间可以停止重复。

6。 边缘计算的优点

采用Cloudflare Workers作为邮件发送基础的最大原因在于边缘计算的本质优势。

延遲
全世界的边缘位置=低延迟
Cloudflare在世界300以上的城市设有据点。 因为请求是在靠近用户的据点处理的,所以与往返遥远的1处的服务器相比,通信距离会更短(回复的时间,包括邮件发送服务的处理也会发生变化)。
冷启动
没有虚拟机型的冷启动
在虚拟机和容器中运行的无服务器,暂时不使用后的第一个请求是等待启动(冷启动)。 Cloudflare解释说,因为Cloudflare Workers在isolate中运行,所以不会发生这种等待。
运营
无需基础设施管理的自动缩放
服务器的管理、容量规划、缩放设置——所有这些都不需要。 请求增加的话会自动缩放,闲置时不会产生成本。

对于备忘录应用程序来说,这个组合是容易处理的选择。 在靠近用户的据点开始处理,不需要管理服务器,规模小的话费用也能控制。 这就是用边缘计算制作Relay API的理由。

在此技术基础上构建的“SimpleMemo”,请一定要试试。

在App Store下载

参考文献