用自己的域名发邮件
验证码随便发
从域名验证到 API 发信,一套免费方案搞定网站注册验证码、密码重置、通知邮件。
Resend 是什么
Resend 是专做事务性邮件(验证码、密码重置、订单通知)的邮件 API 服务。你写几行代码调用它的接口就能发信,不用自己搭邮件服务器,省心且送达率有保障。
免费额度(够不够用先看这)
- 每月 3,000 封、每天上限 100 封,可验证 1 个域名;
- 免费版走共享 IP 池,日发超 100 封才需考虑付费版——验证码场景免费版通常够用。
注册并创建发信 Key
去 resend.com 点 Sign Up,可用 GitHub 或邮箱注册,无需信用卡。注册后去 API Keys 建一把发信 Key(re_ 开头)。
原理一句话
要在 DNS 里加三类记录,向全世界证明"这个域名授权 Resend 代我发信",Gmail 这些收件方才会信任你发出的邮件。不做这步,你的信基本都会进垃圾箱。
在 Resend 添加域名
面板点 Domains → Add Domain,输入你的域名(如 yourdomain.com),面板会给出该域名专属的 DNS 记录值。
三类 DNS 记录一次看懂
下面是三类记录的示意(示例值,真实值看你 Resend 面板):
@v=spf1 include:send.resend.com ~all声明"哪些服务器可以替我发信"。注意:一个域名只能有一条 SPF 记录,已有的话要合并,不能新增第二条。
resend._domainkey(Resend 面板给出,指向 Resend)给每封邮件加数字签名,收件方用公钥验证邮件没被篡改。Resend 一般给 2–3 条 CNAME,全部都要加。
_dmarcv=DMARC1; p=none;告诉收件方"当 SPF/DKIM 都没通过时怎么处理我的邮件",是三项认证的总开关。
去 DNS 服务商逐条添加
在你的 DNS 服务商处添加(Cloudflare:DNS → Records → Add record)。邮件类记录一律选"仅 DNS"(灰色云朵),不要开 CDN 代理,开了代理验证会失败。
回 Resend 点验证
加完等 DNS 生效(Cloudflare 通常几分钟),回 Resend 面板点 Verify,全部变绿即"已验证"。验证通过后,该域名下任意发件地址(如 noreply@、hello@)都可直接用。
建发信 Key
拿到 DNS 记录值
SPF/DKIM/DMARC
全部变绿
发出第一封信
发信接口长这样
请求:POST https://api.resend.com/emails,请求头带 Authorization: Bearer re_你的Key 和 Content-Type: application/json。
必填字段只有三个:from(发件人)、to(数组)、subject;正文 html 和 text 二选一或都给:
{
"from": "你的品牌 <[email protected]>",
"to": ["[email protected]"],
"subject": "你的验证码",
"html": "<p>…</p>",
"text": "…纯文本…"
}
Xuxuking-ai)直接写在 from 里就行。关于发件人头像
Gmail 里发件人旁边那个头像(字母或图片)不是邮件里能指定的。它只认三样:该地址绑定的 Google 账号头像、BIMI 认证 logo、收件人自己存的联系人头像。想让所有人都看到自定义头像,得用这个发件地址注册个 Google 账号并上传头像(前提是这个地址能收信,见第六部分)。
双格式必备
同时提供 html(美观排版) 和 text(纯文本兜底)。实测发现纯 HTML 邮件更容易被 Gmail 判垃圾,加上 text 版后通过率明显改善。
验证码本身的规矩
- 6 位数字即可;
- 用 SHA-256 存哈希,不存明文;
- 10 分钟有效,单个码最多允许试 5 次,防暴力破解。
频率限制防薅羊毛
同一邮箱 1 分钟内只能请求 1 次、每天设上限;同一 IP 短时间大量请求要限流并返回友好提示。不然有人拿你的接口狂刷,你的免费额度几天就没了。
防"枚举账号"的小心机
不存在的邮箱请求"找回密码"时,接口仍返回成功,但不真发信——防止攻击者用你的接口一个个试出哪些邮箱注册过。
文案写清楚
写清有效期和"非本人操作请忽略"。中英双语时,把关键信息(验证码数字、有效期)在两种语言里各出现一次,别让用户猜。
先确认:这不是配置错误
典型现象:SPF、DKIM、DMARC 在 Gmail 认证头里全部显示 pass,邮件仍进垃圾箱。这是新域名没有发信声誉的典型表现——Gmail 对新注册、零历史的域名天然不信任,需要几周的真实收发来积累声誉。这是时间问题,没有开关能立刻解决。
三个解法(按效果排序)
- 每次收到都点"这不是垃圾邮件"——亲手训练 Gmail,几次之后就会改判,最有效;
- 把发件地址加到 Google 通讯录——通讯录里的发件人基本不进垃圾箱;
- 养声誉——持续几周真实邮件往来后自然好转,这段时间提醒用户去垃圾箱捞验证码。
DMARC 的 p=none 是什么意思
p=none 表示"只监控、不拦截":认证失败时收件方不做任何处理,适合刚上线阶段。等一切稳定后可收紧为 p=quarantine(扔垃圾箱)或 p=reject(直接拒收)。
为什么需要收信
Resend 只管"发"。但有些场景需要这个域名地址能收:比如收 Google 账号的验证码(配发件人头像的前提)、收用户回复。Cloudflare 的 Email Routing 完全免费,把邮件转发到你的个人邮箱就行。
开通步骤
- 前提:域名 DNS 已托管在 Cloudflare(免费套餐即可);
- 面板选中域名 → 左侧 Email → Email Routing → 启用,按向导自动添加 3 条 MX 记录;
- 在"目的地地址"添加你的个人邮箱(如 Gmail),去个人邮箱点验证链接;
- 在"路由规则"里建一条规则:指定地址(如
noreply@)或 catch-all 全收,动作选"发送到"已验证的个人邮箱。
两处注意
- MX(管收信)和 SPF/DKIM(管发信)不冲突,可以共存;
- 如果向导提示 SPF 相关,一个域名只能保留一条
v=spf1开头的 TXT 记录,多了要合并。
验证收信通了没
往 [email protected] 发一封测试信,几秒到一分钟内应出现在个人邮箱收件箱。通了之后,就能用该地址注册 Google 账号、上传头像——之后所有经此地址发出的邮件,在 Gmail 里都会显示该头像(头像同步到各收件端可能需要几小时)。
⏰ 时效性声明
- Resend 免费额度、面板文案以 resend.com 实时页面为准,本教程数字仅供参考;
- 各 DNS 记录的主机名与值以 Resend 面板实时显示为准,不要照抄教程里的示例;
- Cloudflare Email Routing 的中文面板文案可能随版本微调,截图仅供参考。
