做出海产品,邮件服务是必不可少的一环。无论是用户注册时的验证邮件、付款成功的收据通知、密码重置的链接发送,还是未来开展 Newsletter 运营,都离不开一个可靠且送达率高的邮件系统。
在接入专业邮件服务之前,我曾使用过 Supabase 自带的邮件功能进行测试,但发现 Gmail 邮箱始终无法收到邮件,甚至在垃圾箱里也找不到踪迹。这主要是因为 Supabase 免费版使用的是共享 SMTP 服务,发件域名并非你自己的域名,因此很容易被 Gmail 等邮箱服务商直接拦截或拒收。
为何选择 Resend
市面上可供选择的邮件服务提供商不少。SendGrid 作为老牌服务商,稳定性好,但配置相对复杂,管理面板对新手也不够友好。AWS SES 价格最具优势,5万封邮件仅需5美元,但你需要自行处理 IAM 权限、SNS 回调、退信处理等一系列基础设施。Mailgun 功能全面,但其免费额度较少。
最终我选择了 Resend,主要基于以下几点考虑:
- API 极其简洁:发送一封邮件仅需寥寥数行代码。
- 免费额度实用:免费版每月提供 3,000 封邮件,对于产品早期阶段完全够用。
- 域名验证快捷:只需在域名服务商处添加几条 DNS 记录,等待几分钟即可完成验证。
- 内置受众管理:自带 Audience 功能,为后续开展 Newsletter 运营省去了集成其他服务的麻烦。
- 对现代技术栈友好:Resend 团队同时也是 React Email 的创建者,因此对 Next.js 项目有着良好的支持。如果你的技术栈是 React + Next.js,集成体验会非常顺畅。

注册与添加域名
首先,访问 resend.com 注册账号。免费版允许添加 1 个域名。登录后进入 Dashboard,导航至 Domains → Add Domain。
这里我建议使用一个子域名,例如 mail.yourdomain.com。这样做的好处是,邮件的 DNS 记录与主域名分离,不会影响主域名的其他服务(如网站、API 等),也是邮件行业的推荐最佳实践。万一子域名的发送信誉受损,也不会波及你的主品牌域名。
添加域名后,Resend 会提供几条需要你添加到域名服务商的 DNS 记录,主要包括 SPF、DKIM 和 DMARC 记录。无论你使用的是 Cloudflare、Namesilo 还是其他服务商,添加过程都类似。添加完毕后,通常等待几分钟,Resend 就会自动验证并通过。

创建 API Key
接下来,在 Dashboard 中导航至 API Keys → Create API Key。

创建时需要注意权限选择:
- Sending access:如果仅用于发送交易类邮件(如注册验证、付款收据),选择此项即可。
- Full access:如果后续还需要使用 Audience 功能管理订阅者列表,则需要选择此项。
请注意,API Key 只会在创建时显示一次,务必立即复制并妥善保存。
在 Supabase 中接入自定义 SMTP
这一步是为了彻底解决 Supabase 身份验证邮件(如注册确认、密码重置)的送达率问题。
进入你的 Supabase 项目 Dashboard,导航至 Authentication → SMTP Settings,开启 Custom SMTP 选项。

按照以下信息填写:
Host: smtp.resend.com
Port: 465
Username: resend
Password: 你的 Resend API Key(格式为 re_xxxx...)
Sender email: noreply@mail.yourdomain.com
Sender name: 你的产品名称
保存配置后,所有由 Supabase 触发的认证邮件(包括邮箱验证、密码重置、Magic Link 等)都将通过你自己的已验证域名发出,极大提升邮件进入收件箱的概率。
代码集成示例:支付成功后发送欢迎邮件
以下是一个实际应用场景:用户通过 Stripe 完成支付后,通过 Stripe Webhook 触发,向用户发送一封包含收据信息和快速入口链接的欢迎邮件。
首先,安装 Resend 的 Node.js SDK:
npm install resend
然后,初始化 Resend 客户端:
import { Resend } from 'resend'
export const resend = new Resend(process.env.RESEND_API_KEY)
最后,在支付成功的处理逻辑中调用发送邮件:
const { error } = await resend.emails.send({
from: ‘你的产品名 <noreply@mail.yourdomain.com>’,
to: userEmail,
subject: ‘欢迎加入!’,
html: emailHtml, // 这里是你的邮件 HTML 内容
})
当然,邮件发送是锦上添花的功能,务必确保支付等核心业务流程的稳定与正确。
常见问题与解决方案
-
错误 403:域名未验证
- 问题:我在 Resend 验证的域名是
mail.example.com,但在代码中设置的发件人地址却是 hello@sub.example.com。
- 原因:发件人邮箱
@ 符号后的域名必须与你已在 Resend 中验证的域名完全一致。
- 解决:确保发件地址格式为
任意前缀@已验证域名。noreply、hello、support 等前缀可以自由设置。
-
Supabase 默认邮件无法送达 Gmail
- 原因:如前所述,是共享 SMTP 和域名信誉问题。
- 解决:按照上述步骤配置 Supabase 的 Custom SMTP 为 Resend 后,问题即可解决。
成本分析
- Resend Free 计划:完全免费,每月 3,000 封邮件,支持 1 个域名。
- Resend Pro 计划:20 美元/月,每月 50,000 封邮件,支持多域名。
对于早期产品而言,免费版的 3,000 封额度足以覆盖注册验证、交易通知等需求。待用户量增长后,再升级至付费计划也不迟。
后续扩展可能性
搭建好可靠的邮件基础设施后,很多用户沟通和运营工作就变得水到渠成:
- 基础事务邮件:用户注册验证、密码重置等功能已通过 Supabase 集成自动处理。
- Newsletter:利用 Resend 内置的 Audience 功能,你可以轻松管理订阅者列表。用户订阅时,通过 API 将其邮箱添加到 Audienc e中;需要发送周刊或公告时,直接向整个列表群发即可,无需再集成 Mailchimp 或 ConvertKit 等第三方服务。这正是在业务层面进行 开源实战 的一种体现,用一套工具解决多个问题。
- 自动化生命周期邮件:课程完成后的证书邮件、用户7天未登录的召回邮件、会员到期前的续费提醒邮件等,都可以基于此通道轻松实现。

总结与流程梳理
整个搭建流程非常高效:
- Resend 注册与域名验证:约 10 分钟。
- Supabase Custom SMTP 配置:约 5 分钟。
- 代码集成:安装 SDK 并编写少量调用代码,熟练的话只需几分钟。
总计不到一小时,你就可以为自己的出海产品搭建起一个免费、高送达率且易于扩展的邮件发送系统。这套方案不仅解决了当下的邮件送达难题,也为未来的用户增长和运营需求预留了空间。希望这篇在 云栈社区 分享的实战笔记,能帮助更多开发者顺利解决出海过程中的邮件服务挑战。