Self-hosted. Theme-aware. Rust-fast.

The mail server that wears your brand.

Self-hosted transactional mail with your colors, your templates, and your SMTP provider. One Docker image. Zero vendor lock-in.

  • Branded emails from config-driven theme tokens
  • Per-job SMTP override for multi-tenant setups
  • Compiled React Email templates with a durable queue

Why Mailify

Built for developers who want ownership without redoing email infra from scratch.

Branded from config

Theme tokens flow into every render so your mail looks like your product, not like a provider default.

Self-hosted by design

Bring your own SMTP provider, run one Docker image, keep your templates and delivery path under your control.

Templates as code

React Email compiles to HTML ahead of time while minijinja placeholders stay live for runtime variables.

Durable delivery queue

Jobs persist in Postgres through apalis, so a worker restart does not eat your outbound mail.

Multi-tenant friendly

Per-job SMTP override lets one Mailify instance fan out across tenants without leaking shared credentials.

Docs-first ergonomics

Clear config, predictable routes, and CLI helpers keep setup close to a boring infrastructure service.

Workflow

Token, send, deliver.

Mailify keeps the request path boring: exchange an API key for a JWT, send a template id, let the queue handle the actual SMTP work.

# 1. Exchange API key for a short-lived JWT
curl -X POST https://mailify.example.com/auth/token \
  -H 'content-type: application/json' \
  -d '{"api_key":"dev-secret"}'

# 2. Queue a themed email
curl -X POST https://mailify.example.com/mail/send \
  -H "authorization: Bearer <jwt>" \
  -H 'content-type: application/json' \
  -d '{
    "template_id": "welcome",
    "locale": "en",
    "to": [{"email": "alice@example.com"}],
    "vars": {"product_name": "Mailify"}
  }'

Theme system

Brand once. Reuse everywhere.

Mailify’s default templates read from a theme object at render time, so brand changes stay in config instead of leaking into every mail template.

primary
accent
success
welcome

Your brand, not your provider.

Swap colors and logo once, then keep shipping the same templates across environments and tenants.

Open dashboard

Architecture

Seven crates. One delivery path.

The API layer receives mail requests, auth validates tokens, templates render branded HTML, and the queue worker ships through SMTP.

mailify-core
mailify-config
mailify-templates
mailify-smtp
mailify-queue
mailify-auth
mailify-api