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. Point your SES code at it, change the endpoint and keys, and it delivers 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.

Drop-in

Your SES code, as it is.

Point the SDK you already use at the engine: only the endpoint and the keys change. SMTP clients send to it too, with STARTTLS and a login.

import boto3

# Your SES code: only the endpoint changes.
ses = boto3.client(
    "sesv2",
    endpoint_url="https://mta.example.com",
    region_name="us-east-1",
)
ses.send_email(
    FromEmailAddress="app@example.com",
    Destination={"ToAddresses": ["you@example.com"]},
    Content={"Simple": {...}},
)

What it does

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 with the official SDKs.

Durable

A message is accepted only once it is committed to disk, and survives a crash, a power cut, and the loss of its host when its disk survives.

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

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 servers

From archive to first delivered message.

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 attestation verify nitromta-*.tar.gz \
  --repo nitrosend/nitromta

Signed release archives for x86_64 and arm64, or the container image 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.

Release updates

Hear when a release ships.

What changed and how it measures, one email per release.