Mail Quickstart
This brings up the whole stack — Stalwart Mail Server plus StateSet Mail — and sends a message that round-trips back to the inbox API.1. Start Stalwart
2. Configure Stalwart
Openhttp://localhost:8080 and sign in as admin with the printed password.
- Settings → Domains — add
local.test. Any domain works for local testing; mail won’t leave the box. - Management → Accounts — create an account
agentin thelocal.testdomain and set a password.
agent@local.test that can both send and receive locally.
3. Plug the credentials into .env
4. Start StateSet Mail
outbound worker started, inbox worker starting, and listening.
5. Send a message
Running natively
The service is a single Rust binary against one SQLite file — Docker is a convenience, not a requirement. Set the same environment variables and run it directly;DATABASE_URL defaults to
sqlite://data/mail.db with WAL mode enabled.
Set up tracking
Opens, clicks, andList-Unsubscribe all need a public origin so the recipient’s mail client
can reach back:
/t/* URL is
HMAC-signed with TRACKING_SECRET (which defaults to the first API key) — rotate it carefully,
since rotation invalidates in-flight links.
Next steps
Overview
The full feature surface.
Conversations
Triage threads instead of messages.
MCP server
Wire it up to Claude.
Configuration
Every environment variable.