出海建站邮件系统搭建实战:一小时完成自建邮件基础设施
在做出海产品时,邮件几乎是不可替代的基础设施。
常见的几个核心场景包括:
- 用户注册后的邮箱验证
- 支付成功后的收据或欢迎邮件
- 密码重置邮件
- Magic Link登录
- 后续的Newsletter或用户召回邮件
如果邮件系统不稳定,这些关键流程都会受到影响。
我最初使用的是 Supabase自带邮件服务。测试后发现一个严重问题:
Gmail邮箱经常完全收不到邮件,甚至垃圾邮箱里也没有。
原因很简单:
- Supabase免费版使用的是 共享SMTP
- 发件域名不是自己的
- Gmail等邮箱服务商会对共享发信信誉做严格过滤
结果就是:邮件被直接拦截。
为了提高送达率,我重新搭建了一套邮件系统,核心方案是:
Resend + 自有域名 + Supabase Custom SMTP
从注册到上线,总耗时不到一小时。
为什么选择 Resend
邮件服务其实有很多选择,我简单对比了一圈。
| 服务 | 优点 | 缺点 |
|---|---|---|
| SendGrid | 老牌稳定 | 配置复杂,Dashboard不友好 |
| AWS SES | 价格极低(5万封约5美元) | 需要配置IAM、SNS、退信处理等复杂组件 |
| Mailgun | 功能完整 | 免费额度较少 |
| Resend | API简单、免费额度高、React生态友好 | 新服务但发展很快 |
最终选择 Resend,主要有几个原因。
API极其简洁
发送邮件只需要 几行代码。
对开发者来说,这一点非常关键。
免费额度足够早期产品
Resend 免费版:
| 套餐 | 月费用 | 邮件额度 | 域名数量 |
|---|---|---|---|
| Free | 0 | 3000封 | 1个 |
| Pro | 20美元 | 50000封 | 多域名 |
对于早期产品来说:
- 注册验证
- 支付收据
- 密码重置
3000封/月完全够用。
域名验证非常简单
只需要添加几条DNS记录:
- SPF
- DKIM
- DMARC
几分钟即可完成验证。
内置 Audience 功能
Resend内置了订阅者管理。
这意味着未来做:
- Newsletter
- 用户召回邮件
- 活动通知
不需要再接入Mailchimp等工具。
React / Next.js 生态友好
Resend团队本身是 React Email 的开发者。
如果你的技术栈是:
- React
- Next.js
集成体验会非常顺手。
注册账号与域名验证
首先注册 Resend 账号。
进入:
Dashboard → Domains → Add Domain免费版支持 1个域名。
我选择使用 子域名 作为发信域名:
mail.yourdomain.com例如:
mail.xxx.net这是邮件系统的最佳实践。
为什么使用子域名
原因有两个:
- 不影响主域名DNS配置
- 发信信誉受损时不会影响主域名
邮件服务商对域名信誉有严格评估,如果发信质量不好,域名可能被降权。
使用子域名可以避免风险扩散。
DNS配置
添加域名后,Resend会提供几条DNS记录。
一般包括:
- SPF
- DKIM
- DMARC
在域名服务商后台添加即可,例如:
- Cloudflare
- Namesilo
- GoDaddy
添加完成后等待几分钟,Resend会自动验证。
创建 API Key
进入:
Dashboard → API Keys → Create API Key这里有两个权限类型:
| 权限 | 使用场景 |
|---|---|
| Sending access | 仅发送邮件 |
| Full access | 管理Audience、订阅者等 |
如果只是交易邮件,例如:
- 注册验证
- 支付收据
Sending access 就足够。
如果未来要做Newsletter,需要 Full access。
注意:
API Key只显示一次,创建后需要立即保存。
Supabase 接入自定义 SMTP
这一部分是整个系统最关键的一步。
目的只有一个:
解决邮件送达率问题。
进入:
Supabase Dashboard
→ Authentication
→ SMTP Settings开启:
Custom SMTP填写以下参数。
| 配置项 | 参数 |
|---|---|
| Host | smtp.resend.com |
| Port | 465 |
| Username | resend |
| Password | Resend API Key |
| Sender email | noreply@mail.yourdomain.com |
| Sender name | 产品名称 |
保存之后:
Supabase的所有认证邮件都会通过你的域名发送,包括:
- 注册验证邮件
- Magic Link登录
- 密码重置邮件
邮件送达率会明显提升。
Stripe 支付成功后发送欢迎邮件
在我的实际项目中,还有一个场景:
用户Stripe付款成功后发送欢迎邮件。
流程如下:
Stripe支付
↓
Webhook触发
↓
调用Resend API发送邮件邮件内容通常包括:
- 收据
- 产品入口链接
- 快速上手指南
安装依赖
npm install resend初始化客户端
import { Resend } from 'resend'
export const resend = new Resend(process.env.RESEND_API_KEY)发送邮件代码
const { error } = await resend.emails.send({
from: 'Product <noreply@mail.yourdomain>',
to: userEmail,
subject: '欢迎加入!',
html: emailHtml,
})发送邮件的代码其实非常简单。
但需要注意:
邮件只是支付流程的附加环节,支付成功逻辑才是核心。
两个常见问题
在实际配置过程中,我遇到了两个典型问题。
域名未验证导致 403
例如:
我在Resend验证的域名是:
mail.fyyd.net但代码里写的是:
hello@chuhai.fyyd.net结果直接返回:
403规则很简单:
- @前面可以随意
- @后面的域名必须和Resend验证的域名完全一致
正确示例:
noreply@mail.fyyd.net
support@mail.fyyd.net
hello@mail.fyyd.netSupabase默认SMTP Gmail收不到
这个问题非常常见。
原因是:
共享SMTP信誉低。
一旦配置自定义SMTP之后,这个问题基本就消失了。
邮件系统成本
Resend的价格结构非常简单。
| 套餐 | 价格 | 邮件额度 |
|---|---|---|
| Free | 0美元 | 3000封/月 |
| Pro | 20美元/月 | 50000封 |
对早期产品来说:
- 注册验证
- 密码重置
- 支付收据
3000封邮件通常完全够用。
用户规模增长后,再升级Pro版本即可。
邮件基础设施搭好之后能做什么
当邮件系统稳定之后,可以做的事情会非常多。
目前已经实现的基础功能:
- 注册验证邮件
- Magic Link登录
- 密码重置
- 支付成功邮件
接下来可以扩展的场景包括:
- Newsletter
- 用户召回邮件
- 续费提醒
- 产品更新通知
- 课程证书发送
Resend内置的 Audience功能 可以直接管理订阅用户列表。
这意味着:
邮件不仅是系统通知工具,也可以成为产品增长工具。
总结
如果你的出海产品正在使用默认SMTP,建议尽早升级邮件基础设施。
完整方案可以总结为:
Resend + 自定义域名 + Supabase Custom SMTP
整个搭建流程:
- 注册Resend
- 添加子域名
- 配置SPF / DKIM / DMARC
- 创建API Key
- Supabase配置Custom SMTP
- 代码中调用Resend API发送邮件
整个过程:
不到一小时即可完成。
但带来的提升是非常明显的:
- Gmail送达率提升
- 发信域名完全可控
- 邮件系统可以扩展更多增长玩法
对于出海产品来说,邮件系统不是锦上添花,而是基础设施。