其他

出海建站邮件系统搭建实战:一小时完成自建邮件基础设施

Created: 03/12/2026

在做出海产品时,邮件几乎是不可替代的基础设施。

常见的几个核心场景包括:

  • 用户注册后的邮箱验证
  • 支付成功后的收据或欢迎邮件
  • 密码重置邮件
  • Magic Link登录
  • 后续的Newsletter或用户召回邮件

如果邮件系统不稳定,这些关键流程都会受到影响。

我最初使用的是 Supabase自带邮件服务。测试后发现一个严重问题:

Gmail邮箱经常完全收不到邮件,甚至垃圾邮箱里也没有。

原因很简单:

  • Supabase免费版使用的是 共享SMTP
  • 发件域名不是自己的
  • Gmail等邮箱服务商会对共享发信信誉做严格过滤

结果就是:邮件被直接拦截。

为了提高送达率,我重新搭建了一套邮件系统,核心方案是:

Resend + 自有域名 + Supabase Custom SMTP

从注册到上线,总耗时不到一小时。


为什么选择 Resend

邮件服务其实有很多选择,我简单对比了一圈。

服务优点缺点
SendGrid老牌稳定配置复杂,Dashboard不友好
AWS SES价格极低(5万封约5美元)需要配置IAM、SNS、退信处理等复杂组件
Mailgun功能完整免费额度较少
ResendAPI简单、免费额度高、React生态友好新服务但发展很快

最终选择 Resend,主要有几个原因。

API极其简洁

发送邮件只需要 几行代码

对开发者来说,这一点非常关键。

免费额度足够早期产品

Resend 免费版:

套餐月费用邮件额度域名数量
Free03000封1个
Pro20美元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

填写以下参数。

配置项参数
Hostsmtp.resend.com
Port465
Usernameresend
PasswordResend API Key
Sender emailnoreply@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.net

Supabase默认SMTP Gmail收不到

这个问题非常常见。

原因是:

共享SMTP信誉低。

一旦配置自定义SMTP之后,这个问题基本就消失了。


邮件系统成本

Resend的价格结构非常简单。

套餐价格邮件额度
Free0美元3000封/月
Pro20美元/月50000封

对早期产品来说:

  • 注册验证
  • 密码重置
  • 支付收据

3000封邮件通常完全够用。

用户规模增长后,再升级Pro版本即可。


邮件基础设施搭好之后能做什么

当邮件系统稳定之后,可以做的事情会非常多。

目前已经实现的基础功能:

  • 注册验证邮件
  • Magic Link登录
  • 密码重置
  • 支付成功邮件

接下来可以扩展的场景包括:

  • Newsletter
  • 用户召回邮件
  • 续费提醒
  • 产品更新通知
  • 课程证书发送

Resend内置的 Audience功能 可以直接管理订阅用户列表。

这意味着:

邮件不仅是系统通知工具,也可以成为产品增长工具。


总结

如果你的出海产品正在使用默认SMTP,建议尽早升级邮件基础设施。

完整方案可以总结为:

Resend + 自定义域名 + Supabase Custom SMTP

整个搭建流程:

  1. 注册Resend
  2. 添加子域名
  3. 配置SPF / DKIM / DMARC
  4. 创建API Key
  5. Supabase配置Custom SMTP
  6. 代码中调用Resend API发送邮件

整个过程:

不到一小时即可完成。

但带来的提升是非常明显的:

  • Gmail送达率提升
  • 发信域名完全可控
  • 邮件系统可以扩展更多增长玩法

对于出海产品来说,邮件系统不是锦上添花,而是基础设施。