UAI Mail Architecture
Mailu service map, on-disk layout, Beacon co-host relationship, and Cadence send hooks.
Body
UAI Mail Architecture
Canonical product: UAI Mail (uai-doc-ecosystem-product-uai-mail). Runtime: Mailu 2.0.
Compose Services
| Service | Role |
|---|---|
| resolver | Local DNS (Unbound) |
| front | nginx front / port publisher |
| redis | Rspamd cache and rate limits |
| imap | Dovecot (ports 143, 993) |
| smtp | Postfix (ports 25, 465, 587) |
| antispam | Rspamd |
| admin | Mailu admin UI and account DB |
| webmail | SnappyMail |
Images: ghcr.io/mailu/*:2.0 plus redis:7-alpine.
Web admin/webmail bind to loopback only (127.0.0.1:8080 / 127.0.0.1:8443).
On-Disk Layout
| Path | Contents |
|---|---|
/root/mail/docker-compose.yml |
Compose definition (no git) |
/root/mail/mailu.env |
Secrets — never expose values to models |
/root/mail/renew-certs.sh |
Cert renew — couples Beacon stop + Mailu front restart; frozen |
/mailu |
Persistent data root (~176M when inventoried) |
/mailu/mail |
Maildirs |
/mailu/data/main.db |
Admin DB |
/mailu/dkim |
DKIM keys |
/mailu/certs |
TLS material copies |
/mailu/filter |
Rspamd state |
/mailu/webmail |
SnappyMail state |
/mailu/redis |
Redis persistence |
/mailu/mailqueue |
Postfix queue files |
Beacon Relationship
The VPS hostname is mail.united-ai.ca. Beacon (uai-doc-ecosystem-product-beacon-v1) owns public HTTP(S) on ports 80/443 on this host. Mailu web was loopback-only. Beacon route label mail and capability-map entry for Beacon edge are not a live mail upstream.
LEGACY WARNING. Historical Caddy pointed
mail.united-ai.caat a NUC custom webmail port. That path is retired. No first-party umail app repo was found.
Cadence Send Hooks
Cadence (uai-doc-ecosystem-product-cadence-v6) has an AI send path (code present; live send not exercised while stack stopped):
| Item | Fact |
|---|---|
| Tool id | email.umail.approved_send (LEGACY umail name in tool id) |
| Login | POST {base}/api/auth/login |
| Send | POST {base}/api/accounts/{account_id}/send |
| Env surfaces | CADENCE_UMAIL_* / SCRIBE_UMAIL_* (names only) |
| SMTP fallback | CADENCE_SMTP_* via lettre (names only) |
Credential values must never appear in model context. See uai-doc-plans-uai-mail-ai-access and uai-doc-runbooks-uai-mail-boundaries.
See Also
-
uai-doc-runbooks-uai-mail-state -
uai-doc-runbooks-uai-mail-restore -
[REDACTED:high-entropy]