self-hosted transactional email

Email that is deliverable.

An open-source, Resend-compatible email platform you run yourself. Accounts for your team, Amazon SES or any SMTP behind it, DKIM, tracking, broadcasts — one container, zero vendors.

delivery trace — live
$ sendthen trace em_4kq0w2xr
09:31:04.012queuedaccepted via POST /api/v1/emails
09:31:04.019signingDKIM-Signature: v=1; a=rsa-sha256; d=yourdomain.com; s=stmail
09:31:04.031handshakeMX gmail-smtp-in.l.google.com:25 → 220 ready
09:31:04.214sent250 2.0.0 OK · message-id=<em_4kq0@yourdomain.com>
09:31:04.220deliveredrecipient inbox confirmed
09:31:04.226webhookPOST /hooks/email → 200 · webhook-signature: v1,oTn3…
mail providers
4
mail providers
DKIM keys
2048-bit
DKIM keys
event types
9
event types
SQLite file
1
SQLite file

Your first email is one POST away.

POST /api/v1/emails
import { SendThen } from 'sendthen';

const st = new SendThen('st_xxxxxxxx');

await st.emails.send({
  from: 'you <hello@yourdomain.com>',
  to: 'user@example.com',
  subject: 'Welcome aboard',
  html: '<strong>It just sends.</strong>',
});

Every message, routed & delivered.

Bring your own pipes

Amazon SES, any SMTP relay, direct-to-MX, or a zero-network sandbox — per account, switchable in Settings. SES runs on signed HTTP, no SDK.

Tuned for the inbox

Verified sending domains with one-click DNS checks, 2048-bit DKIM per domain, automatic bounce & complaint suppression via SES feedback.

Opens, clicks, webhooks

Signed tracking pixel and link redirects, svix-compatible HMAC webhooks retried 5× with backoff — every event lands where you want it.

Broadcasts & templates

Audiences, per-contact {{variables}}, one-click unsubscribe, reusable templates, batch sends of 100 — the marketing side, self-hosted too.

Own your email pipeline tonight.

docker run, set a password, add your domain. Everything on this page runs on your box.