BearerMail
A complete self-hosted mail system: your own mail server for your own domain, a full webmail client, and a native Android app — all running on hardware you control.
BearerMail starts from plMail by karatektus — an excellent self-hosted mail client — and adds the missing half: a real mail server (Postfix + Dovecot + OpenDKIM) that sends and receives internet mail for your domain, plus a Drive with share links, on-the-spot aliases, and a companion Android app. One compose stack, one domain, zero third-party mail providers required.
Get running →
Docker Compose, three env vars, and your domain sending mail in minutes.
Mail server →
How Postfix, Dovecot and DKIM fit together, relays, and testing.
Android app →
Install the APK, pair it, and use Drive, aliases and the app lock.
What's in the box
| Part | What it does | Repo |
|---|---|---|
| Webmail | plMail with BearerMail additions: Drive, share links, aliases, mail-server admin, plan and code cards, mail login blocking, single sign-on | pl_mail_bearermail |
| Mail server | Postfix (SMTP) + Dovecot (IMAP) + OpenDKIM, as compose services in the same stack | pl_mail_bearermail docker/mail |
| Android app | Native client with Drive, aliases, verification-code copy, app lock, auto-updates | pl_mail_android_bearermail |
How the pieces fit
internet --port 25--> mta (Postfix) --LMTP--> mailstore (Dovecot)
webmail --IMAP------> mailstore (reading, like any account)
webmail --SMTP 587--> mta (sending, DKIM-signed)
android --JMAP------> webmail (mail, calendar, Drive, aliases)
android --IMAP 993--> mailstore (optional direct access)
Mail lands in Dovecot; the webmail syncs it over IMAP like any other account — so threads, full-text search, filters and push all work on your domain mail with no special casing. Outbound mail is DKIM-signed by your own server, delivered directly or through a relay like Mailjet.
What BearerMail adds over upstream plMail
- Built-in mail server new — Postfix + Dovecot + OpenDKIM as
docker compose --profile mailservices. Your domain sends and receives directly. - Drive new — personal file storage with folders, share links (password + expiry), and deep links into mail and calendar.
- On-the-spot aliases new — create a working alias in one tap, from the web or the app.
- SMTP relay UI new — point outbound mail at Mailjet (or any relay) from Admin → Mail server, no shell needed.
- Dynamic DNS new — Cloudflare updater keeps your mail hostname on your home IP.
- Android app new — native client with Drive, alias creation, plan detection, verification-code copy, PIN lock and self-updates.
- Drive admin new — files up to 2 GB, per-person storage limits, a Drive off switch, and reported share links handled from Admin → Drive. Attachments too big to send go to Drive as a link automatically.
- Plans and codes in mail new — "meet at 10am at 218 Main St" gets an Add to calendar card, a verification code gets a Copy code card, and compose can insert one of your events as an
.ics. - Mail login blocking new — addresses that keep getting mailbox passwords wrong on IMAP are blocked, with Unblock in Admin → Security.
- Single sign-on new — sign in through Authentik or Keycloak, with optional "go straight to the provider" and "hide the password form" switches. See Single sign-on.
- One-command updates —
./update.shbacks up, pulls the latestmainand rebuilds.
Everything upstream plMail does — Gmail/Outlook/IMAP accounts, calendar, filters, themes — still works, and BearerMail stays merged with upstream (currently plMail v0.3.5; see Features for what that brought in). For those features, the upstream handbook remains the reference.
BearerMail is a fork. The webmail is karatektus's plMail and the Android app is karatektus's pl_mail_android, both AGPL-3.0. All credit for the base goes upstream; what's documented here is what the fork adds and how the pieces are run together.