Mailify
The mail server that wears your brand.
Mailify is a self-hosted transactional email server written in Rust. You give it a theme, a template id, and a recipient — it sends a branded email through your own SMTP provider. No SaaS, no vendor lock-in, no external service holding your template library hostage.
Why Mailify
Section titled “Why Mailify”- Branded out of the box — palette, fonts, logo, footer text injected into every template via a single
Themeconfig object. - One Docker image —
donighost/mailify:<tag>ships binary + compiled templates + built-in migrations.docker run, done. - Templates as code — React Email (
.tsx) compiles to pre-rendered HTML with minijinja placeholders preserved for runtime variables. - Durable queue — jobs persist in Postgres via apalis. A worker crash does not eat your outbound.
- Per-job SMTP override — one install can fan out to many tenants, each using their own SMTP provider, with credentials accepted in-memory only.
- Argon2 + JWT auth — API keys are argon2-hashed at rest; clients exchange them for short-lived JWTs per session.
- Rust-fast, distroless-small — final image ≈20 MB, non-root, nothing but
cclibs and the binary.
Who it’s for
Section titled “Who it’s for”- Indie / solo backend devs who don’t want to write an MJML template every time.
- Small SaaS teams needing Postmark-like ergonomics without paying per email.
- Agencies running multi-tenant stacks where each client needs its own visual identity.
Quick links
Section titled “Quick links”- Install → — Docker, install script, cargo install, or build from source
- Quickstart → — send your first email in 5 minutes against a local Mailpit
- Concepts → — templates, themes, jobs, queue, overrides, bootstrap
- Configuration → — every TOML key, every env var, every default
- HTTP API → — auth, send, jobs, templates, health
- Troubleshooting → — symptoms, causes, fixes by stage
- Contribute → — three ways to help: code, reach, sponsorship
License
Section titled “License”MIT. See LICENSE.