Skip to content

v3.1.0

Choose a tag to compare

@maathimself maathimself released this 18 Aug 00:05
· 2 commits to main since this release

MailFlow v3.1.0

A reliability release focused on IMAP connection handling for people running many accounts on one mail server, plus a fix for duplicate messages in the list.

Fixes

  • Message list no longer shows duplicate copies of the same email (#378). When a message was re-synced (e.g. moved folders or its UID changed), its internal row id was regenerated, and the list could end up showing the same email twice — clicking one highlighted both. The list now identifies rows by their stable Message-ID instead of the volatile row id, so a re-synced message replaces its old entry rather than appearing as a duplicate. Thanks to @brmiller for the detailed report that pinned it down.

  • Snippet indexer no longer gets stuck in an endless backoff loop on connection-limited servers (#379). With several accounts on one mail server, MailFlow's background jobs could collectively exceed the server's per-user/per-IP connection limit, leaving the snippet indexer perpetually refused and retrying without ever draining its backlog. Backfill and snippet indexing now share a single per-host background-connection budget, and connection-refusal backoff is applied per host (so all accounts on a saturated server back off together) instead of thrashing account-by-account.

New

  • Optional per-host persistent-connection limit — IMAP_MAX_PERSISTENT_PER_HOST (#379). For setups with many accounts on one mail server that caps simultaneous IMAP connections. Each account normally holds one always-on IDLE connection, so N accounts on one host means N connections — which can blow the server's limit (Dovecot defaults to 10 per user/IP). When you set this cap, MailFlow keeps that many accounts on live push and quietly polls the rest on the sync interval instead, staying under the provider's limit — the way desktop clients demote secondary accounts. Default is unlimited, so behavior is unchanged unless you opt in.

Upgrade notes

  • GHCR / image users: pull 3.1.0 (also tagged 3.1 and latest).
  • Source / build-from-source users: pull main and rebuild; the version will report as 3.1.0.
  • New setting (optional): IMAP_MAX_PERSISTENT_PER_HOST — empty or 0 = unlimited (default, unchanged). Only set it to your provider's connection limit if you run many accounts on one connection-limited server. It's wired into .env.example and both compose files.