Email infrastructure
you run yourself.

A complete delivery engine with reputation built in. One binary, no external database, open source.

send.ts
const res = await fetch("https://mail.example.com/emails", {  method: "POST",  headers: {    Authorization: `Bearer ${Bun.env.BUNZZLE_KEY}`,    "Idempotency-Key": "order-42",  },  body: JSON.stringify({    from: "Shop <hello@example.com>",    to: ["ana@example.org", "ben@example.net",         "cleo@example.com", "dan@example.io"],    subject: "Your order has shipped",    html: "<p>It is on its way.</p>",  }),});
Terminal
$ sudo bunzzle doctor[ok]   EHLO name: mail.example.com[ok]   DKIM self-check: verifies against live DNS[ok]   DMARC: TXT _dmarc.example.com is correct11 ok, 0 warnings, 0 problems
Delivery
ana@example.orgmx1.example.org · TLS 1.3 · 250 2.0.0 OK
ben@example.netmx.example.net · TLS 1.3 · 250 OK
cleo@example.com421 4.7.0 try again later · retrying
dan@example.iomail.example.io · TLS 1.2 · 250 OK
Every attempt, with MX, TLS and the full SMTP conversation

One command,
and it's running.

The installer checks the signed release, creates a user and a systemd sandbox for each of the six roles and starts them. Set three values, then bunzzle doctor tells you what is left to fix.

Installation guide
Terminal
$ curl -fsSLO https://github.com/bunzzle/bunzzle/releases/latest/download/install.sh$ sudo sh install.sh
/etc/bunzzle/bunzzle.env
BUNZZLE_EHLO_NAME=mail.example.comBUNZZLE_SOURCE_IPS=203.0.113.10BUNZZLE_PUBLIC_URL=https://mail.example.comBUNZZLE_INBOUND_PORT=25

Benchmarks

A 2-CPU, 2 GB Linux machine, with the load generator and test mail servers on the same CPUs. See the method

~6,000/s

Accepted

Emails accepted by the API and stored durably, p99 under 27 ms.

1,480/s

Delivered

End to end, with STARTTLS and two DKIM signatures each.

1.2ms

CPU per email

Two thirds of it is the RSA signature.

285MB

Memory

All roles together, during sustained sending.

esc