面向开发者的邮件服务, 价格只要一半。
基于 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
- 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// 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-2f0e6f1d8c10import { 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