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.
Drop-in
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
One Rust binary on your own Linux host, with its store in SQLite and a systemd unit.
SendEmail, SendBulkEmail, templates, identities, configuration sets, tenants, the suppression list, dedicated IPs and SES-shaped events through SNS. Tested with the official SDKs.
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.
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.
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
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.
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
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.
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.
nitromta setup \ --config /etc/nitromta/config.toml \ --hostname mta.example.com
Writes a commented configuration and the installation's keys.
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
What changed and how it measures, one email per release.