- Confirmed core bet via spike/mimecheck: mox/message parses a messy multipart message standalone (envelope, MIME tree, attachment, body) with only an io.ReaderAt — no mox store/config. Option B is viable. - cmd/openmail single binary: serve|migrate|smtpd|sender|version subcommands. - internal/api: chi router, constant-time bearer auth, /healthz, stubbed v0 AgentMail-shaped routes (501 until core services land). - internal/store: pgxpool + embedded, idempotent, tracked SQL migrations. - internal/store/migrations/0001_init.sql: full native schema (pods, inboxes, threads, messages, attachments, drafts, api_keys, webhooks, outbox, events, domains) with FTS + GIN indexes. Validated end-to-end against Postgres 16. - deploy/: docker-compose (postgres+minio+openmail+caddy), Caddyfile, DNS.md (MX/SPF/DKIM/DMARC/DANE/MTA-STS). Makefile, .gitignore. - Verified: go vet clean; build OK; health/auth smoke tests; migrate idempotent. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
OpenMail
An agent-native, self-hosted mail server. One Go binary that gives an AI agent its own real email address — receive, parse, thread, search, and send actual SMTP mail on a box you control — behind a clean REST API and an MCP server.
Think "AgentMail, but self-hosted and MIT-licensed." OpenMail embeds the battle-tested mail internals of Mox (also MIT) for the hard, correctness-critical plumbing — DKIM, SPF/DMARC, DANE + MTA-STS secure delivery, real-world MIME parsing, spam filtering — and layers a native, agent-shaped data model (Postgres + object storage) and API on top.
Status: early WIP, private during initial build. Will be released MIT-licensed and public. Designed only from public RFCs and public API surfaces — nothing proprietary.
License: MIT — see LICENSE. Builds on Mox (MIT) and the emersion/go-* mail
libraries. See ARCHITECTURE.md for the design of record.
Why
The valuable, hard part of an agent-mailbox product is not the API — it's the mail plumbing: receiving over SMTP/MX, sending with real deliverability (SPF/DKIM/DMARC, DANE/MTA-STS, IP reputation), parsing messy MIME, threading, and storage. Hosted products (AgentMail and similar) solve this well but are closed and run on someone else's infrastructure. OpenMail's bet: you can embed an existing MIT-licensed, production-grade Go mail stack instead of rebuilding it, and spend your effort on the part nobody has done well — the agent-native layer.
What makes it agent-native
- Persistent inboxes as first-class API resources, provisioned in one call.
- Structured threads, not raw IMAP —
In-Reply-To/Referencesstitched into conversations. extracted_text— reply content with quoted history stripped, so an agent reads the new part.- MCP server — an agent (Claude Code, etc.) owns and operates its mailbox directly as tools.
- Webhooks + WebSocket
message.receivedevents — agents react to mail in real time. - AgentMail-API-shaped REST where reasonable, so existing tooling points at a self-hosted base URL.
Goals
- Self-hostable in one
docker compose upon a single VPS; scales to a fleet later. - Deliverability taken seriously — self-host SMTP send with DKIM + DANE + MTA-STS via Mox's delivery stack, or a relay backend (SES/Postmark/Resend) for inbox placement on day one.
- Single static Go binary with subcommands; Postgres + S3-compatible object store as the only deps.
- Genuinely MIT — every embedded dependency is MIT/BSD; no GPL/AGPL anywhere in the tree.
Non-goals (for v1)
- A hosted multi-tenant SaaS. OpenMail is self-host-first (multi-tenant
podsexist, but you run it). - A full webmail UI. The product is the API + MCP; humans use their own client.
- Beating a mature provider's deliverability on day one — self-host IP reputation takes warmup + time; the relay backend exists for exactly that gap.