教程 / 后端集成 / 使用 SendGrid 发送事务邮件
📝 文字 ● 初级 更新于 2026-05-13

使用 SendGrid 发送事务邮件

SendGrid 是按发送量计算全球最大的邮件 API——由 Twilio 收购,Uber、Airbnb、Spotify 等企业均在使用。专为大规模场景设计:支持子账户、专用 IP、IP 预热,以及营销邮件与事务邮件一体化管理。代价是界面相对复杂,中等发送量的套餐定价也偏高。

什么时候选 SendGrid

0
  • 适合选 SendGrid 的场景——企业级发送量(每月 100 万封以上)、需要多品牌或多团队的子账户管理、希望将事务邮件与营销邮件统一在一个平台,或者需要专用 IP。
  • Resend——中小规模下开发体验更好、更便宜。
  • Postmark——中小规模下收件率最优。
  • AWS SES——任何规模下单封邮件成本最低,前提是你愿意自己多做一些配置。

注册账号

1

前往 signup.sendgrid.com ↗ 注册。免费套餐在 60 天试用期结束后可永久保留每日 100 封的发送配额;付费套餐从 $19.95/月起,每月可发 5 万封。

SendGrid 的注册流程包含账号审核环节——为了防止滥用,他们有时会对新账号进行额外确认。请耐心等待。

验证发件人

2

两种验证方式:

  • 单一发件人验证(Single Sender Verification)——验证单个邮件地址。SendGrid 会发送一封确认邮件。上手最快,但会限制送达率。查看文档 ↗
  • 域名身份验证(Domain Authentication)——通过 DNS 验证整个域名,生产环境推荐使用。查看文档 ↗

进行域名身份验证:Settings → Sender Authentication → Authenticate Your Domain。选择你的 DNS 服务商,SendGrid 会生成 3 条 CNAME 记录:

  • em1234.yourdomain.com → SendGrid 邮件服务器
  • s1._domainkey.yourdomain.com → DKIM 记录 1
  • s2._domainkey.yourdomain.com → DKIM 记录 2

将这些记录添加到你的 DNS 服务商,然后回到 SendGrid 点击 Verify。通常 10–30 分钟内即可通过验证。

生成 API Key

3

Settings → API Keys → Create API Key,配置以下选项:

  • API Key Name——填写便于识别的名称(如 "production-server")。
  • API Key Permissions——选择 Restricted Access,只授予应用实际需要的权限。仅需发送邮件时,选 Mail Send: Full 即可。生产环境请避免使用 Full Access

复制生成的 Key(以 SG. 开头),它只会显示一次。将其存入环境变量:

SENDGRID_API_KEY=SG.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

安装 SDK

4
npm install @sendgrid/mail

其他语言:Python、Ruby、PHP、Java、C#、Go ↗

发送第一封邮件

5
import sgMail from "@sendgrid/mail";

sgMail.setApiKey(process.env.SENDGRID_API_KEY);

await sgMail.send({
  to: "[email protected]",
  from: "[email protected]",            // must be a verified sender
  subject: "Hello from SendGrid",
  text: "Plain text version",
  html: "<p>HTML body</p>",
});

检查收件箱,如果没有收到,可以在 SendGrid 控制台的 Activity 中查看——每次发送都会记录投递状态以及收件方邮件服务器的响应信息。

使用动态模板

6

对于需要重复发送的邮件(欢迎信、收据、密码重置等),可以使用 动态模板(Dynamic Templates)——在 SendGrid 控制台设计好后,通过模板 ID 调用发送。

Email API → Dynamic Templates → Create Template。可以使用拖拽编辑器或 HTML 编辑器。变量使用 Handlebars 语法,格式为 {{name}}

通过模板 ID 发送:

await sgMail.send({
  to: user.email,
  from: "[email protected]",
  templateId: "d-xxxxxxxxxxxxxxxxxxxxxxxx",     // starts with d-
  dynamicTemplateData: {
    name: user.name,
    verifyUrl: `https://yourapp.com/verify/${token}`,
  },
});

在控制台修改模板后,所有后续发送将立即生效——无需重新部署。

Webhook 接收投递事件

7

Settings → Mail Settings → Event Webhook。填入你的接口地址,选择需要监听的事件:已投递、已打开、已点击、退信、被丢弃、被举报为垃圾邮件。

SendGrid 会批量 POST 事件数据到你的接口。建议开启签名事件 Webhook 以确保安全——SendGrid 会对请求体进行签名,你在服务端验签即可。签名 Webhook 文档 ↗

如何处理这些事件:

  • 退信(Bounced)——将该收件人标记为无效地址,在重新确认地址前停止发送。
  • 被举报为垃圾邮件(Spam reported)——同上处理;该用户已主动将你的邮件标记为垃圾邮件。
  • 已投递 / 已打开 / 已点击——接入你的分析平台(如 PostHog)进行用户互动跟踪。

IP 预热(规模扩大时)

8

免费及入门套餐默认使用共享 IP。发送量较大时可申请专用 IP——但新 IP 没有发送信誉,需要在 4–6 周内逐步提高发送量来完成"预热"。

SendGrid 支持自动化预热:在账号设置中开启 IP 预热功能,SendGrid 会按照逐步递增的每日限额来控制你的发送量。跳过预热直接大量发送,邮件大概率会进入垃圾邮件箱。

IP 预热计划 ↗。每月发送量低于约 10 万封时,共享 IP 池完全够用。

子账户(Pro 及以上套餐)

9

SendGrid 的 Subusers(子用户) 功能允许一个 SendGrid 主账号下管理多个独立的子账号,每个子账号拥有各自的 API Key、发件人身份验证和 IP 池。适合旗下有多个产品线或运营多租户平台的场景。

Settings → Subuser Management。创建子用户并设置独立凭据,分配 IP 池和发送限额。子用户文档 ↗

大多数独立开发者和 SaaS 产品用不到这个功能。如果你的规模还不需要多账户体系,选其他服务商会更合适。

常见问题排查

10
  • "The from address does not match a verified Sender Identity"——发件人地址未通过验证,或填写的地址与验证时使用的地址不一致。请重新检查 Sender Authentication 配置。
  • "Account temporarily blocked"——SendGrid 的反滥用系统检测到异常。通常几小时后会自动解除;若持续存在,请联系官方支持。
  • "Maximum credits exceeded"——已达到当前套餐的每日或每月发送上限,请升级套餐或等待额度重置。
  • 邮件已投递但进了垃圾箱——几乎都是 DNS 记录缺失导致的。检查 Sender Authentication 状态,同时确认 DMARC 已正确配置。
SendGrid 也是垃圾邮件发送者最常用的平台之一。由于历史上的大量滥用行为,部分邮件接收方(尤其是小型邮件服务器)对 SendGrid 的 IP 持更高的怀疑态度。在中小发送量场景下,Postmark 往往能获得更好的收件率,尽管单封邮件的成本更高。

定价实况

11

免费套餐:每日 100 封(60 天 4 万封/月试用期结束后永久有效)。Essentials:$19.95/月,可发 5 万封。Pro:$89.95/月,可发 10 万封,含专用 IP。SendGrid 定价 ↗

大规模发送时单封成本有竞争力(百万封/月级别约 $0.0004/封)。每月发送量低于 5 万封时,Resend 在相近开发体验下更便宜。

官方参考资料

接下来学什么