MailFlow v2.9.0
A round of quality-of-life features plus several reliability and self-hosting fixes — including an important backend stability fix for IMAP timeouts.
New features
- Message-pane context menu (#355) — Right-click anywhere in an open message to Copy, Select All, Find, or Print, alongside the full set of message actions (reply, forward, archive, snooze, move, block, and more). Links, images, and text fields still get the native browser menu. Includes a Find-in-message dialog with match-case and next/previous, fully translated across all seven languages.
- Toggle message previews (#312) — A new option under Settings → Appearance → Layouts → Message List hides the third-row preview snippet for a denser list. The preference syncs across your devices.
Fixes & improvements
- Backend no longer crashes on IMAP socket timeouts (#360) — A transport-level
errorduring an IMAP connection could go unhandled and take down the entire backend process — dropping every account, not just the one syncing. The connection layer now attaches its error handler before connecting, so a timeout is logged and recovered instead of fatal. - System Email works with private/self-hosted SMTP relays (#358) — When Allow private / local hosts is enabled, System Email (invites, verification/2FA codes, password resets) now honors that policy, so a relay on a private IP is accepted instead of being rejected as a reserved address.
- Linux auto-update hand-off (#346) — For
.deb/.rpmdesktop updates, MailFlow now shows the exactsudo apt install/sudo dnf installcommand with a Copy & Quit button, rather than trying (and failing) to launch an installer. No update runs with elevated privileges — you install it yourself in a terminal.
Self-hosting
- Fixed HTTPS setup in
docker-compose.ghcr.yml(#357) — The inline Caddyfile config now interpolates${DOMAIN}and${ACME_EMAIL}correctly. Previously Docker Compose left literal braces in the config and Caddy failed to start. If you use the ghcr HTTPS profile, pull the updated compose file.
Security & maintenance
- Bumped
nanoid,dompurify, andpostcssto clear npm audit advisories (one high, several moderate). No API or behavior changes.
Upgrading
Standard upgrade — pull the v2.9.0 images and restart your stack:
docker compose pull && docker compose up -dThere are no database migrations that require manual steps. Self-hosters on the HTTPS ghcr profile should also refresh their docker-compose.ghcr.yml (see #357).
Thanks
Community contributions and reports in this release: @dcoffin88 (#346, #355), @brmiller (#312), and bug reports from @lesly (#360), @shopsD (#358), and @Anorionil (#357).
Full changelog: v2.8.0...v2.9.0