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.
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": {...}}, )
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 against the official AWS SDKs for Python, JavaScript and Ruby.
A message is accepted only once it is committed to disk, and survives a crash or a power cut.
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.
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.
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.
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.
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.
One email per release: what's new and how fast it runs.