Public keys only
The server never holds a private key, so it cannot read a single stored message. Zero-access by construction, not by policy.

Everything Mailcow or Mail-in-a-Box gives you — SMTP, IMAP, spam filtering, virtual domains, quotas — plus one thing they don't: every message is PGP-encrypted the moment it arrives, before it ever touches disk.
Plaintext lives only in memory, for milliseconds, inside the encrypt gateway.
SMTP on 25, authenticated submission on 587/465. Domains and mailboxes come from Postgres.
Spam scoring, DKIM signing and authentication results before anything is queued.
Each message is wrapped as PGP/MIME using the recipient's public key, in memory.
Only ciphertext reaches the Maildir. IMAP clients decrypt locally with the private key.
The server never holds a private key, so it cannot read a single stored message. Zero-access by construction, not by policy.
Postfix, Dovecot, Rspamd, Postgres, the encrypt gateway and the admin API come up together with docker compose up -d.
Domains, mailboxes, aliases, quotas, keys and delivery metadata — every console action is an authenticated API call.
Uploaded keys are parsed and fingerprinted, private keys are rejected, and mailboxes without a key are flagged as unprotected.
One script installs everything on a fresh Debian or Ubuntu server: mail delivery, encrypted storage, the admin console and webmail, all behind HTTPS on port 443. Then a guided setup page walks you through your admin account, your first domain and the DNS records to publish.
git clone <this-repo> encpost && cd encpost
sudo bash install.sh --hostname mail.example.com \
--email you@example.com
# then open https://mail.example.com/setupSender, recipient, timestamp and size stay readable — SMTP requires them.
Readable unless you enable subject encryption, which breaks subject search in most clients.
Hop-to-hop TLS still depends on the other server, unless you encrypt to the recipient's key too.