对比
面向事务邮件的 SendGrid 替代方案
SpacePost 是基于 Amazon SES 的事务邮件 API,由一家欧盟公司运营。如果你的应用通过 SendGrid 发送收据、密码重置和通知,这里会说明每一部分如何迁移,以及 SendGrid 仍然做得更多的地方。
本页讨论的是事务邮件。SpacePost 提供受众和简单的群发,但不能替代 SendGrid Marketing Campaigns(自动化、订阅表单、A/B 测试、可视化编辑器)。
SendGrid 概念对照
| 主题 | SendGrid | SpacePost |
|---|---|---|
| 发送 API | v3 Mail Send:带 personalizations 的 POST /v3/mail/send(每个请求最多 1,000 个),返回 202 Accepted | POST /emails(一封包含 to、cc、bcc 的邮件)或 POST /emails/batch(最多 100 封),返回邮件 ID |
| SMTP | smtp.sendgrid.net,端口 25、587 或 2525(TLS)或 465(SSL),用户名 apikey | smtp.spacepost.dev,端口 25976(STARTTLS),用户名 spacepost,密码为你的 API 密钥 |
| 模板 | 存储在 SendGrid 中的动态模板(ID 以 d- 开头),使用 Handlebars,通过 dynamic_template_data 填充 | 暂无托管模板:在你的应用中渲染 HTML(例如使用 React Email),然后发送 html 和 text |
| 屏蔽列表 | 退信、拦截、垃圾邮件投诉、无效地址和退订分组 | 每个团队一个屏蔽列表:硬退信、投诉和反复的软退信会自动加入;你也可以用 POST /suppressions 自行添加 |
| 事件 Webhook | Event Webhook:事件的 JSON 数组(processed、delivered、deferred、bounce、dropped、open、click、spam report、unsubscribe),也有签名版本 | 按事件类型的 Webhook(email.sent、delivered、delivery_delayed、bounced、complained、opened、clicked、failed、suppressed),每个请求一个事件,Standard Webhooks 签名 |
| 欧盟 | 全球 API,另有面向欧盟区域子用户的欧盟主机(api.eu.sendgrid.com) | 由欧盟公司 Studio 404 d.o.o. 运营;从 AWS eu-central-1(法兰克福)发送;数据存储在欧盟 |
| 营销邮件 | Marketing Campaigns:联系人、分组、自动化、订阅表单 | 受众、联系人和带一键退订的群发;没有自动化和可视化编辑器 |
迁移步骤
01
密钥和域名
创建 SpacePost API 密钥并验证你的发信域名(三条 DKIM CNAME 加上 MAIL FROM 记录)。切换完成前保留 SendGrid 的 DNS 记录。
02
发送调用
每个 personalization 对应一次 POST /emails 调用:to、cc、bcc、subject、html 或 text、reply_to、base64 附件和自定义头都可沿用。如需一次发送最多 100 封,请使用 POST /emails/batch。
03
或者只改 SMTP
将主机改为 smtp.spacepost.dev,端口改为 25976(STARTTLS),用户名改为 spacepost,密码改为你的 API 密钥。
04
模板
发送前在代码中渲染动态模板。Handlebars 源文件可以用任何 Handlebars 库继续使用。
05
屏蔽列表
从 SendGrid 导出退信、拦截、垃圾邮件投诉和退订地址,并用 POST /suppressions 逐个添加,这样就不会再向它们发信。
06
Webhook
为你使用的事件创建 Webhook,并把 SendGrid 的事件名称对应到我们的名称。签名遵循 Standard Webhooks,因此兼容 Svix 的库都能验证。
同一封邮件,迁移前后
// SendGrid v3 Mail Send
await fetch("https://api.sendgrid.com/v3/mail/send", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.SENDGRID_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
personalizations: [{ to: [{ email: "ada@example.com" }] }],
from: { email: "receipts@acme.com", name: "Acme" },
subject: "Your receipt",
content: [{ type: "text/html", value: html }],
}),
});// SpacePost (Resend-compatible API)
const res = await fetch("https://api.spacepost.dev/emails", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.SPACEPOST_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
from: "Acme <receipts@acme.com>",
to: ["ada@example.com"],
subject: "Your receipt",
html,
}),
});
const { id } = await res.json();SendGrid 做得更多的地方
- 带设计编辑器的托管动态模板,以及带自动化和订阅表单的 Marketing Campaigns。
- 用于接收邮件的 Inbound Parse,SpacePost 目前还不提供。
- 多年来在超大发送量下的运营经验,以及更多在子用户和区域之间分配流量的方式。
SendGrid 的信息来自 2026年10月29日 的 twilio.com/docs/sendgrid(Mail Send API、SMTP 集成、Event Webhook)。这些信息可能会变化;如有过时之处,请发送邮件至 support@spacepost.dev 告诉我们。
SpacePost 是独立产品,与 Twilio 或 SendGrid 无关联,也未获其认可。“SendGrid”和“Twilio”是其各自所有者的商标。
