跳到正文
spacepost

面向开发者的邮件服务, 价格只要一半。

基于 AWS SES、兼容 Resend 的 API。更换 Base URL,代码不用改,费用更低:Pro 每月 €9(不含增值税),包含 5万 封邮件;Resend Pro 为 USD 20。

每月 3,000 封免费邮件,无需信用卡。

用 SpacePost 发送邮件

import { SpacePost } from "@spacepost/node";

const spacepost = new SpacePost("sp_live_xxxxxxxxxxxx");

const { data, error } = await spacepost.emails.send({
  from: "Acme <hello@acme.com>",
  to: ["ada@example.com"],
  subject: "Your receipt",
  html: "<p>Thanks for your order.</p>",
});
curl -X POST https://api.spacepost.dev/emails \
  -H "Authorization: Bearer sp_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "Acme <hello@acme.com>",
    "to": ["ada@example.com"],
    "subject": "Your receipt",
    "html": "<p>Thanks for your order.</p>"
  }'
import requests

r = requests.post(
    "https://api.spacepost.dev/emails",
    headers={"Authorization": "Bearer sp_live_xxxxxxxxxxxx"},
    json={
        "from": "Acme <hello@acme.com>",
        "to": ["ada@example.com"],
        "subject": "Your receipt",
        "html": "<p>Thanks for your order.</p>",
    },
)
print(r.json())
body := strings.NewReader(`{
  "from": "Acme <hello@acme.com>",
  "to": ["ada@example.com"],
  "subject": "Your receipt",
  "html": "<p>Thanks for your order.</p>"
}`)

req, _ := http.NewRequest("POST", "https://api.spacepost.dev/emails", body)
req.Header.Set("Authorization", "Bearer sp_live_xxxxxxxxxxxx")
req.Header.Set("Content-Type", "application/json")

res, err := http.DefaultClient.Do(req)
<?php
$ch = curl_init("https://api.spacepost.dev/emails");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer sp_live_xxxxxxxxxxxx",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "from" => "Acme <hello@acme.com>",
        "to" => ["ada@example.com"],
        "subject" => "Your receipt",
        "html" => "<p>Thanks for your order.</p>",
    ]),
]);
$response = curl_exec($ch);
require "net/http"
require "json"

uri = URI("https://api.spacepost.dev/emails")
req = Net::HTTP::Post.new(uri, "Content-Type" => "application/json")
req["Authorization"] = "Bearer sp_live_xxxxxxxxxxxx"
req.body = {
  from: "Acme <hello@acme.com>",
  to: ["ada@example.com"],
  subject: "Your receipt",
  html: "<p>Thanks for your order.</p>"
}.to_json

res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
import nodemailer from "nodemailer";

const transport = nodemailer.createTransport({
  host: "smtp.spacepost.dev",
  port: 25976,
  secure: false, // STARTTLS
  requireTLS: true,
  auth: { user: "spacepost", pass: "sp_live_xxxxxxxxxxxx" },
});

await transport.sendMail({
  from: "Acme <hello@acme.com>",
  to: "ada@example.com",
  subject: "Your receipt",
  html: "<p>Thanks for your order.</p>",
});

请求格式与 Resend 相同。请把密钥换成你自己的。

立足欧盟

一家欧盟公司。你的数据留在欧盟。

SpacePost 由斯洛文尼亚的 Studio 404 d.o.o. 开发和运营。你的邮件、日志和账户数据都在欧盟境内存储和处理,与你签约的是一家欧盟公司。

欧盟公司,欧盟合同

Studio 404 d.o.o.,斯洛文尼亚。我们的服务条款以及作为其组成部分的数据处理附录均受斯洛文尼亚法律管辖。

数据位于法兰克福和阿姆斯特丹

邮件通过法兰克福(eu-central-1)的 Amazon SES 发送。应用、工作进程和数据库运行在阿姆斯特丹(荷兰)的 Railway 上。

欧元定价,欧盟增值税发票

价格以欧元(EUR)计,不含增值税。每笔付款都开具欧元增值税发票,持有效增值税号的欧盟企业适用反向征税(reverse charge)。

GDPR 数据处理附录

为每位客户提供符合 GDPR 第 28 条的数据处理附录,并公开子处理方列表,注明每家服务商的所在地。

我们的部分服务商(如 AWS、Stripe 和 Railway)是美国公司。每一家处理什么数据、在哪里处理,都列在我们的子处理方列表中。

迁移

一行代码,从 Resend 切换过来

请求体、Webhook 处理器和错误处理都保持原样。把 Base URL 指向 SpacePost,再换上新密钥即可。

  • 01验证你的域名(三条 DKIM CNAME 记录)。
  • 02创建 API 密钥。
  • 03更换 Base URL,然后部署。
完整迁移指南
.env
# .env
- RESEND_BASE_URL=https://api.resend.com
- RESEND_API_KEY=re_xxxxxxxx
+ RESEND_BASE_URL=https://api.spacepost.dev
+ RESEND_API_KEY=sp_live_xxxxxxxx
app.ts
// Option A: keep the Resend SDK, point it at SpacePost
- const resend = new Resend(process.env.RESEND_API_KEY);
+ const resend = new Resend(process.env.SPACEPOST_API_KEY, { baseUrl: "https://api.spacepost.dev" });

// Option B: use the drop-in SDK
- import { Resend } from "resend";
+ import { SpacePost as Resend } from "@spacepost/node";

功能

Resend API 能做的都有,无需重新学习

事务邮件 API

POST /emails,路径、请求体、响应和错误格式都与 Resend 一致。支持附件、标签、自定义标头、cc/bcc 和 reply-to。

批量与定时发送

每次批量调用最多 100 封邮件。可用 ISO 时间戳或“in 1 hour”安排发送,发出前可改期或取消。

支持 DKIM、SPF、DMARC 的域名

三条 CNAME 即可完成 Easy DKIM,另有自定义 MAIL FROM 子域名、DMARC 指引和一键验证,每条记录都带复制按钮。

带签名的 Webhook

九种事件类型,采用 Standard Webhooks 签名(兼容 Svix),支持退避重试,并可在控制台重放。

受众与群发

联系人、受众和群发,支持合并标签。自动为你添加一键退订(RFC 8058)。

SMTP 中继

smtp.spacepost.dev,端口 25976(STARTTLS)。用户名为“spacepost”,密码为 API 密钥。适用于 Supabase、Auth0、WordPress 等。

幂等键

发送 Idempotency-Key 标头后,24 小时内的重试会返回原始响应,而不会重复发信。

测试模式收件箱

发送到 test.spacepost.dev 下的地址,即可模拟已送达、退信和投诉结果。不会有真实邮件离开我们的服务器。

打开与点击追踪

按域名开关。事件会显示在邮件时间线和你的 Webhook 中。

每秒 10 个请求

按团队限速,并返回 ratelimit-* 标头,Resend 仅为 2。Scale 可提升到 25。

暂未支持:收信、模板编辑器、多区域发信。查看开发计划。

送达率与信任

为重要邮件准备的稳健、谨慎的基础设施

我们暂时还没有客户 Logo 可以展示,所以这里如实说明它是怎么运作的。

Amazon SES 基础设施

邮件通过位于 eu-central-1(法兰克福)的 Amazon SES 发送。我们不自建邮件服务器,也不假装自建。

按团队隔离信誉

每个团队都有独立的 SES tenant,某个发件人的劣质名单只会暂停该发件人,不影响其他人。

自动抑制

硬退信和投诉会自动加入你的抑制列表,每次发送前都会检查所有收件人。

在 SES 介入之前设防

退信率超过 5% 或投诉率超过 0.2% 时,团队会被自动暂停,远早于 SES 自身的审查阈值。

新账户沙盒

新团队在前 7 天仅限已验证域名,且每天最多 100 封邮件。这有助于为所有人保持共享信誉的良好状态。

透明的状态页

故障和可用性公开发布在状态页上,而不是藏在支持工单后面。

加密、密钥处理、数据保留,以及如何报告漏洞。

安全概览

实时可用性与故障:状态页。

开发者工具

可通过代码、终端或 AI 智能体来驱动

终端
$ bunx spacepost send \
    --from "Acme <hello@acme.com>" \
    --to ada@example.com \
    --subject "Hello from the CLI" \
    --text "It works."

✓ Queued  email_id=0192f3a4-7c1e-7b6d-9a35-2f0e6f1d8c10
验证 Webhook
import { Webhook } from "standardwebhooks";

const wh = new Webhook(process.env.SPACEPOST_WEBHOOK_SECRET!);
const event = wh.verify(rawBody, {
  "webhook-id": req.headers["webhook-id"],
  "webhook-timestamp": req.headers["webhook-timestamp"],
  "webhook-signature": req.headers["webhook-signature"],
});
  • Node SDK

    @spacepost/node 兼容 Resend,零依赖并基于 fetch,可在 Node、Bun、Deno 和边缘运行时中运行。

  • CLI

    spacepost send、spacepost domains verify、spacepost logs。提供适用于 macOS、Linux 和 Windows 的单一可执行文件。

  • 面向 AI 智能体的 MCP 服务器

    通过 stdio,@spacepost/mcp 让 Claude、Cursor 等智能体发送邮件、管理域名并读取投递日志。

  • OpenAPI 3.1 规范

    完整的规范,可用来生成任何语言的类型化客户端,也可导入 Postman 和 Insomnia。

  • Webhook 验证

    采用 Standard Webhooks 标头(webhook-id、webhook-timestamp、webhook-signature),现有的 Svix 库即可验证我们的载荷。

价格

免费开始,增长后按千封计费。

Free

€0 /月

不含增值税

包含 3,000 封邮件。

Resend Free:USD 0

Pro

€9 /月

不含增值税

包含 50,000 封邮件,超出部分每 1,000 封 €0.25。

Resend Pro:USD 20

Scale

€35 /月

不含增值税

包含 200,000 封邮件,超出部分每 1,000 封 €0.20。

Resend Scale:10万 封邮件 USD 90

查看价格和计算器

常见问题

直截了当的回答

没找到答案?请写信到 support@spacepost.dev。

SpacePost 真的兼容 Resend 吗?
路径、请求与响应格式、错误名称和分页都遵循 Resend 的 API,因此大多数应用只需更换 Base URL 和 API 密钥。目前支持哪些、还有哪些在计划中,请看功能对比。
为什么更便宜?
我们基于 Amazon SES,每 1,000 封邮件约 0.10 USD,并让产品专注于 API。Pro 每月 €9(不含增值税),包含 50,000 封邮件;Resend 公布的价格为 USD 20。额外每千封邮件的价格我们也更低。
如果其他客户乱发邮件,我的信誉会受影响吗?
每个团队都有独立的 SES tenant 和单独的信誉追踪。当退信率或投诉率越过阈值时,我们的防护机制会自动暂停该发件人。Enterprise 提供专用 IP。
我的数据存放在哪里?
发信运行在 AWS eu-central-1(法兰克福)。应用及其数据库运行在 Railway 的欧盟区域(荷兰阿姆斯特丹)。请查看子处理方列表。
免费版不够用了怎么办?
Free 方案达到每月 3,000 封邮件后会停止发送,而不会悄悄向你收费。想升级到 Pro 随时可以,也可随时取消。
可以发送营销邮件吗?
可以,但只能发给已同意接收的人。群发会自动添加一键退订。禁止使用购买或抓取的名单,详见可接受使用政策。

五分钟内发出你的第一封邮件

创建免费账户,验证一个域名,调用一次 API。无需信用卡。