개발자를 위한 이메일, 절반 가격으로.
AWS SES 기반의 Resend 호환 API입니다. 기본 URL만 바꾸면 코드는 그대로이고, 요금은 더 낮습니다. Pro는 이메일 5만통에 월 €9(VAT 별도), 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와 같은 요청 형식입니다. 키는 본인의 키로 바꾸세요.
EU 소재
EU 기업입니다. 데이터는 EU에 머뭅니다.
SpacePost는 슬로베니아의 Studio 404 d.o.o.가 개발하고 운영합니다. 이메일, 로그, 계정 데이터는 EU에서 저장되고 처리되며, 계약 상대는 EU 기업입니다.
EU 기업, EU 계약
Studio 404 d.o.o., 슬로베니아. 서비스 약관과 그 일부인 데이터 처리 부속서에는 슬로베니아 법이 적용됩니다.
데이터는 프랑크푸르트와 암스테르담에
이메일은 프랑크푸르트(eu-central-1)의 Amazon SES로 발송합니다. 애플리케이션, 워커, 데이터베이스는 암스테르담(네덜란드)의 Railway에서 실행됩니다.
EUR 가격, EU VAT 인보이스
가격은 EUR 기준이며 VAT 별도입니다. 모든 결제에 EUR VAT 인보이스가 발행되며, 유효한 VAT 번호가 있는 EU 사업자에게는 역과세(reverse charge)가 적용됩니다.
GDPR 데이터 처리 부속서
모든 고객에게 GDPR 제28조에 따른 데이터 처리 부속서를 제공하며, 각 공급업체의 위치를 밝힌 하위 처리자 목록을 공개합니다.
AWS, Stripe, Railway 등 일부 공급업체는 미국 기업입니다. 각 업체가 무엇을 어디에서 처리하는지는 하위 처리자 목록에 공개되어 있습니다.
마이그레이션
한 줄로 Resend에서 옮기기
요청 본문, 웹훅 핸들러, 오류 처리는 그대로입니다. 기본 URL을 SpacePost로 바꾸고 키만 교체하세요.
- 01도메인을 인증합니다 (DKIM CNAME 3개).
- 02API 키를 만듭니다.
- 03기본 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
Resend와 같은 경로, 요청 본문, 응답, 오류 형식의 POST /emails. 첨부 파일, 태그, 사용자 지정 헤더, cc/bcc, reply-to를 지원합니다.
일괄 발송과 예약
일괄 호출 한 번에 최대 100통. ISO 타임스탬프나 "in 1 hour"로 예약하고, 발송 전에 일정을 바꾸거나 취소할 수 있습니다.
DKIM, SPF, DMARC 도메인
CNAME 3개로 설정하는 Easy DKIM, 사용자 지정 MAIL FROM 서브도메인, DMARC 안내, 원클릭 인증을 제공하며 모든 레코드에 복사 버튼이 있습니다.
서명된 웹훅
이벤트 유형 9개, Standard Webhooks 서명(Svix 호환), 백오프 재시도, 대시보드에서 다시 보내기를 지원합니다.
오디언스와 브로드캐스트
연락처, 오디언스, 병합 태그를 쓰는 브로드캐스트. 원클릭 수신 거부(RFC 8058)는 자동으로 추가됩니다.
SMTP 릴레이
smtp.spacepost.dev, 25976 포트(STARTTLS). 사용자 이름은 "spacepost", 비밀번호는 API 키입니다. Supabase, Auth0, WordPress 등에서 사용할 수 있습니다.
멱등성 키
Idempotency-Key 헤더를 보내면 24시간 안의 재시도는 중복 이메일 대신 최초 응답을 반환합니다.
테스트 모드 수신함
test.spacepost.dev 주소로 보내면 전달, 반송, 스팸 신고 결과를 시뮬레이션합니다. 실제 메일은 서버 밖으로 나가지 않습니다.
열람 및 클릭 추적
도메인별로 켜고 끌 수 있습니다. 이벤트는 이메일 타임라인과 웹훅에 표시됩니다.
초당 10건 요청
ratelimit-* 헤더를 제공하는 팀별 요청 한도로, Resend의 2건보다 높습니다. Scale에서는 25건까지 늘어납니다.
아직 없는 기능: 수신 이메일, 템플릿 편집기, 멀티 리전 발송. 계획을 확인해 보세요.
전달률과 신뢰
중요한 메일을 위한 차분하고 신중한 인프라
아직 내세울 고객 로고가 없으니, 실제 동작 방식을 설명드립니다.
Amazon SES 인프라
메일은 eu-central-1(프랑크푸르트)의 Amazon SES를 통해 발송됩니다. 자체 메일 서버는 운영하지 않으며, 운영하는 척하지도 않습니다.
팀별 평판 분리
팀마다 별도의 SES 테넌트를 사용하므로, 한 발신자의 잘못된 목록은 그 발신자만 일시 중지시키고 다른 팀에는 영향을 주지 않습니다.
자동 발송 제외 처리
하드 반송과 스팸 신고는 자동으로 발송 제외 목록에 올라가며, 모든 수신자는 발송 전마다 확인됩니다.
SES에 닿기 전의 안전장치
반송률이 5%를 넘거나 스팸 신고율이 0.2%를 넘으면 SES 자체 검토 기준에 한참 못 미치는 시점에 팀이 자동으로 일시 중지됩니다.
샌드박스로 시작하는 신규 계정
신규 팀은 처음 7일 동안 인증된 도메인과 하루 100통으로 제한됩니다. 공유 평판을 모두에게 깨끗하게 유지하기 위해서입니다.
투명한 상태 페이지
장애와 가동 상태는 지원 티켓 뒤에 숨기지 않고 상태 페이지에 공개합니다.
암호화, 키 관리, 보관 기간, 취약점 신고 방법.
보안 개요실시간 가동 상태와 장애: 상태 페이지.
개발자 도구
코드, 터미널, 에이전트 어디서든 쓰도록 만들었습니다
$ 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 서버
@spacepost/mcp로 Claude, Cursor 등 에이전트가 stdio를 통해 메일 발송, 도메인 관리, 전달 로그 조회를 할 수 있습니다.
OpenAPI 3.1 스펙
어떤 언어로든 타입이 있는 클라이언트를 생성하거나 Postman, Insomnia로 가져올 수 있는 완전한 스펙입니다.
웹훅 검증
Standard Webhooks 헤더(webhook-id, webhook-timestamp, webhook-signature)를 사용하므로 기존 Svix 라이브러리로 페이로드를 검증할 수 있습니다.
요금
무료로 시작하고, 커지면 천 통 단위로 지불하세요.
Free
€0 /월
VAT 별도
이메일 3,000통 포함.
Resend Free: USD 0
Pro
€9 /월
VAT 별도
이메일 50,000통 포함, 초과 시 1,000통당 €0.25.
Resend Pro: USD 20
Scale
€35 /월
VAT 별도
이메일 200,000통 포함, 초과 시 1,000통당 €0.20.
Resend Scale: 이메일 10만통에 USD 90