NitroMTA NitroMTA

Your mail.
Your metal.

The open-source Amazon SES replacement.

A self-hosted mail delivery engine that speaks the Amazon SES v2 API. Keep your SES code and deliver your mail from IP addresses you control.

Nitrosend's mail delivery engine, open sourced.

Built in Rust. Self-hosted. Apache-2.0.

The NitroMTA mark as a machined metal N with vermilion faces.

Try it on your machine.

Capture mode runs the whole engine locally and shows each message in a browser instead of sending it. Your SES code as it is, with no DNS records or IP address needed.

brew install nitrosend/tap/nitromta
nitromta setup --config config.toml --capture
nitromta run --config config.toml

Send with your SES code, then open 127.0.0.1:9090/capture to see each message as its receiver would. SMTP clients send to it too. The capture quickstart has every step, the account and its key among them.

import boto3

# Only the endpoint and the keys change.
ses = boto3.client(
    "sesv2",
    endpoint_url="https://127.0.0.1:4443",
    region_name="us-east-1",
)
ses.send_email(
    FromEmailAddress="[email protected]",
    Destination={"ToAddresses": ["[email protected]"]},
    Content={"Simple": {...}},
)

Keep your integration. Own your delivery.

One Rust binary on your own Linux host, with its store in SQLite and a systemd unit.

SES v2 compatible

SendEmail, SendBulkEmail, templates, identities, configuration sets, tenants, the suppression list, dedicated IPs and SES-shaped events through SNS. Tested against the official AWS SDKs for Python, JavaScript and Ruby.

Durable

A message is accepted only once it is committed to disk, and survives a crash or a power cut.

Deliverability built in

New IPs warm up receiver by receiver from 50 messages a day. Per-provider connection limits and cooldowns, automatic suppression, DKIM signing, and TLS verified by MTA-STS and DANE.

Explains itself

A CLI that says why any message is waiting, a doctor that checks your DNS and tells you what to publish, health checks and Prometheus metrics.

Benchmarks

3.16× KumoMTA. 4.11× Postfix.

Each system on 4 CPUs of the same AWS bare-metal server, committing every message to disk before accepting it: 16 KiB messages, DKIM-signed, TLS in and out.

NitroMTA
3,313messages/s
KumoMTA2026.09.29
1,048messages/s
Postfix3.11.7 with OpenDKIM
806messages/s

1.35 million messages across nine runs, every one delivered once and DKIM-verified.

The highest rate each sustained, median of three runs, on an AWS c7gd.metal with each system's queue on local NVMe. Run it yourself with cargo harness quick. The method and every run.

Run it on your own servers.

From install to first delivered message on any x86_64 or arm64 Linux host with outbound port 25, a reverse DNS name for each sending IP, and a domain whose DNS you control.

01Install

gh release download \
  -R nitrosend/nitromta -p '*_amd64.deb'
sudo apt install ./nitromta_*_amd64.deb

Packages for Debian, Ubuntu, RHEL and Fedora on x86_64 and arm64, with signed build provenance. Also on the AUR, Homebrew and ghcr.io/nitrosend/nitromta.

02Set up

nitromta setup \
  --config /etc/nitromta/config.toml \
  --hostname mta.example.com

Writes a commented configuration and the installation's keys.

03Check

nitromta doctor \
  --config /etc/nitromta/config.toml

Checks reverse DNS, SPF, DKIM, DMARC and the bounce MX, and tells you what to publish.

Hear when a release ships.

One email per release: what's new and how fast it runs.