MailFlow v3.5.3
A reliability release. The headline is a connection-handling defect that could make IMAP fail wholesale, plus a new optional way to read conversations.
Fixed: IMAP connections
-
Mail could stop syncing entirely after a few slow message loads (#474), reported by @amalroymj. When MailFlow's small pool of IMAP connections was all busy, any further operation waited ten seconds and then opened a connection of its own, with nothing bounding how many did that at once. Two slow body fetches were enough: everything queued behind them (marking read, bulk operations, the folder status cycle) opened its own login. In a test reproduction, twenty five queued operations opened twenty seven connections for a single account. Providers answer that by refusing everything, which is why the reported failure was not limited to the fetches that stalled, and why it also affected Gmail accounts on the same server. Connections are now capped per account and further work waits its turn, which is what Thunderbird, Evolution and offlineimap all do.
-
Command failedin the logs was ours, not your server's. Every rejected IMAP command throws that same string, and the server's own explanation was being discarded before it reached the log. It now shows, with the response code. This also repaired something real rather than cosmetic: the backoff that stops MailFlow hammering a provider keys off that text, so while every rejection readCommand failed, it never triggered. -
A wrong password was retried every ninety seconds, forever. One test account logged 627 failed logins in sixteen hours. Rejected credentials now back off on their own schedule, from five minutes up to six hours, and show as an error on the account instead of failing silently. Saving the account or pressing Reconnect retries immediately.
-
Large mailboxes could never finish their integrity check. The check verifies that MailFlow holds what the server holds. On a 34,000 message mailbox it needed about thirteen minutes against a sixty second budget, so it timed out every time and that mailbox went unverified for hours, while each attempt spent a full minute of real work on the server before discarding it. It now reads membership cheaply and only fetches flags when that is affordable.
-
A handful of messages a server lists but will not send could loop forever. An iCloud account had five such messages: the integrity check found them missing, scheduled a download, the server returned nothing, and the next check found them again. Thirty five times in five hours, indefinitely. Those are now remembered and skipped, and retried a week later in case the server recovers.
-
Several teardown paths could hang on a wedged connection and stall an account's syncing, or background work for every account on that server, until restart.
New: conversation reading pane
Based on the design in #317 by @YunQue0912, rebuilt from scratch. Off by default; turn it on in Settings, Layouts, where you can choose between the single message view, a grouped message list, or the full conversation pane.
Opening a threaded message shows the whole conversation stacked, with only the newest message expanded and the rest collapsed until you want them. Archive, delete, spam, move and snooze act on the entire conversation; reply, reply all and forward act on the individual message you are reading, since that is what decides the recipients.
Also fixed
- Messages opened from a push notification or a link can now open as a conversation.
- Unrelated messages no longer merge into one thread when only their subjects match.
- Replying from the message list picked the wrong sending alias when the match was on the address the mail was delivered to.
Contributed
- Compose toolbar performance (#464) by @dcoffin88.
- Brazilian Portuguese translation (#471) by @prudenciooficial.
Docker images: ghcr.io/maathimself/mailflow-backend:3.5.3 and ghcr.io/maathimself/mailflow-frontend:3.5.3, for amd64 and arm64. No migration steps beyond the usual pull and restart; one new table is created automatically.