教程 搜索 / 后端集成 / 使用 Resend 发送事务性邮件
📝 文字 ● 中级 更新于 2026-05-13

使用 Resend 发送事务性邮件

Resend 是面向开发者的电子邮件 API——SDK 轻巧、免费额度慷慨、支持真正的 HTML 模板。只要你接受"最慢的步骤是配置域名 DNS,而不是写代码"这个现实,整个配置过程十分钟就能搞定。

从 Web 应用发送邮件,看起来简单,真正做起来才知道坑在哪里。你写一个小函数,向邮件服务商的 API 发起 POST 请求,测试邮件顺利发出,还落进了 Gmail 收件箱——大功告成。然后流量进入生产环境,邮件开始落进垃圾箱,甚至直接被收件服务器拒绝。代码没有任何改动,问题根本不在代码。

邮件送达率主要取决于三条 DNS 记录——SPF、DKIM 和 DMARC——它们告诉收件服务器:"是的,这个服务商有权代表这个域名发送邮件,以下是验证方式。"没有这些记录,现代收件方(Gmail、Apple Mail、Outlook)轻则把你的邮件扔进垃圾箱,重则直接拒收。配置这些记录之所以麻烦,是因为它们必须挂在你实际用于发件的域名上,也就是说要去域名注册商那里改 DNS,然后等待生效。

Resend 的价值主张是"让这整套流程变得最简单"。仪表板会明确告诉你要添加哪些 DNS 记录,并自动验证。SDK 轻量好用。免费套餐(每月 3,000 封、每日 100 封)足以应对几乎所有独立项目。它的 HTML 邮件模板基于 React 组件,这在邮件服务领域颇为少见,比拖拽 WYSIWYG 编辑器舒服得多。本教程涵盖完整的配置流程;核心原则同样适用于其他现代邮件服务商(Postmark、SendGrid、Loops 等),只是具体操作以 Resend 为准。

你将学到

第一步:确定发件域名

1

用你自己的域名

邮件应该从你拥有的域名发出——[email protected],而不是 [email protected]。原因有两个:

  • 信任感。收件人看到的是"来自你的真实品牌",而不是"来自一个任何人都能注册的免费邮箱"。
  • 送达率。自己掌控的域名可以配置 SPF/DKIM/DMARC 记录;免费邮箱地址做不到这一点。

还没有域名的话,请参阅域名注册教程。你也可以使用专门用于事务邮件的子域名——比如 mail.yourapp.comnotifications.yourapp.com——这是个好习惯,因为它能将发件信誉与根域名上的其他业务隔离开来。

第二步:创建 Resend 账号

2

在 resend.com 注册

注册账号。免费套餐提供每月 3,000 封、每日 100 封的发送量,发件地址是共享的 [email protected]。这足够用来测试 SDK,但不适合对外发给真实用户——因为 resend.dev 发出的邮件看起来不像是来自你的品牌,收件人可能会产生疑虑。

要用自己的域名发件,就需要先添加并验证域名,这就是下一步的内容。

第三步:在仪表板中添加域名

3

Resend → Domains → Add Domain

点击 Add Domain,输入你要用于发件的域名(或子域名),点击 Add。Resend 会列出需要添加的 DNS 记录,通常有 3 到 5 条:一条 SPF、两到三条 DKIM(取决于配置)、可选的 DMARC,以及一条 MX 记录(如果你希望退信通知也通过 Resend 接收的话)。

这些记录看起来有些复杂,但你不需要理解背后的密码学原理——只需逐条原样复制到你的 DNS 服务商即可。

第四步:在 DNS 服务商处添加记录

4

严格按照 Resend 的说明操作

对于 Resend 列出的每条记录,前往你的 DNS 服务商(如需了解 DNS 操作,请参阅 DNS 教程),依次添加:

  • 类型(Type):与 Resend 显示的一致(TXT、CNAME、MX 等)。
  • 名称/主机(Name/Host):完全一致。不同服务商格式略有差异,有的只需填 resend,有的需要填 resend.yourdomain.com,保持一致即可。
  • 值(Value):原样粘贴,注意不要有多余空格——DNS 的值是精确字符串。
  • TTL:默认值即可。

全部添加完成后,在 Resend 中点击 Verify DNS Records。DNS 生效可能需要几分钟到几小时不等。Resend 会自动定期重新检查,所有记录解析正常后会显示"已验证"状态。

每条记录的实际作用:SPF(TXT 记录)声明哪些邮件服务器有权代表你的域名发送邮件。DKIM(TXT 或 CNAME)是一种加密签名,证明邮件确实来自这些服务器且未被篡改。DMARC(_dmarc 处的 TXT)告诉收件方,当 SPF 或 DKIM 验证失败时该怎么办——隔离、拒绝,还是仅上报。三者合力,构成现代邮件"这封邮件是合法的"的完整握手机制。

第五步:获取 API 密钥

5

Resend → API Keys → Create

点击 Create API Key,为密钥命名(例如"production"),选择权限(通常选 Sending access——限制权限比完全访问更安全)。复制密钥(re_…),它只显示这一次。

将其写入后端的环境文件:RESEND_API_KEY=re_…。和往常一样,不要提交到 git。

第六步:发送第一封邮件

6

SDK 调用方式

在项目中安装 SDK:

npm install resend
# or: pip install resend, or: gem install resend

发送一封测试邮件:

import { Resend } from 'resend';

const resend = new Resend(process.env.RESEND_API_KEY);

await resend.emails.send({
  from: 'You <[email protected]>',
  to: ['[email protected]'],
  subject: 'Hello from Resend',
  html: '<p>This is the body of the email.</p>',
});

查看收件箱。如果邮件到达,说明配置成功。如果没有收到,打开 Resend 仪表板的 Emails 日志——它记录了每次发送尝试及其状态(已送达、退信、进入垃圾箱等)以及接收方的响应信息。

第七步:用 React Email 制作真正的模板

7

或者直接用你喜欢的 HTML

对于一次性邮件,直接写 HTML 字符串完全够用。但对于需要反复发送的内容(欢迎邮件、收据、密码重置),使用模板会更省心。Resend 官方推荐的方案是 React Email——把邮件写成 React 组件,发送时渲染为 HTML。

import { Resend } from 'resend';
import { ReceiptEmail } from './emails/Receipt';

await resend.emails.send({
  from: 'Receipts <[email protected]>',
  to: customer.email,
  subject: `Receipt for $${amount}`,
  react: ReceiptEmail({ customerName: customer.name, amount, items }),
});

React Email 组件提供了邮件安全的原生元素(<Container><Text><Button>),最终渲染为邮件客户端所要求的基于表格的 HTML。你写现代 JSX,库来处理那些复古的底层标记。

第八步:邮件落入垃圾箱时怎么办

8

送达率排查清单

邮件进垃圾箱,通常是以下原因之一:

  • DNS 记录未完全验证。检查 Resend 仪表板。可能部分记录已生效,部分还没有。所有记录都必须变为绿色。
  • 发件域名与 DKIM 域名不一致。如果你为 mail.yourdomain.com 配置了 DKIM,却从 [email protected] 发件,DKIM 签名无法授权这个 From 地址。要么改为从 [email protected] 发件,要么为根域名单独配置 DKIM。
  • 邮件内容看起来像垃圾邮件。全大写、大量"FREE!!!"、过多 emoji、可疑的链接模式。用 mail-tester.com 测试——它会给出评分并解释扣分原因。
  • 域名太新、发送量太大。新域名没有发件信誉,邮件服务商会保持警惕,直到你持续发出看起来正常的邮件一到两周。发送量要循序渐进地提升。
永远不要用事务邮件账号发送营销邮件。Resend 的服务条款(以及类似服务商)明确规定,事务邮件套餐仅用于非营销邮件——收据、密码重置、安全提醒、系统通知。用事务账号发送订阅通讯可能导致账号被封禁。营销邮件请使用专门的平台(Loops、Customer.io、ConvertKit)。

接下来