github maathimself/mailflow v3.5.0

5 hours ago

MailFlow v3.5.0

IMAP push has never actually worked. It does now. Plus a new opt-in anti-spam classifier, and a batch of fixes.

The big one

  • IMAP IDLE now starts at all. ImapFlow arms IDLE only after a period of quiet on the connection, and its default for that is 15 seconds — exactly the fastest sync interval the settings offer. On a 15s interval every sync tick cleared the arming timer about 100ms before it fired, so IDLE never started on any account, on any provider. Mail was arriving by polling and nothing said otherwise; the log line reporting "IMAP IDLE: new mail" fires on a response that polling also produces, so it looked healthy.

    Found by capturing raw IMAP traffic: 1429 lines across three providers, zero client-issued IDLE commands. Zoho was the only provider to complain, because it drops a non-IDLE session after about 295 seconds, which produced an endless reconnect loop. Everyone else was silently degraded to polling instead.

    A health check now warns if an IDLE-capable account is not observed idling, so this cannot hide again.

Added

  • Anti-spam classifier (#388), contributed by @rafpigna. A per-user Naive Bayes model blended with a 14-rule engine, with a "Why?" explanation for any verdict, per-account training, and an admin settings tab. Opt-in and off by default on every account — nothing changes until you enable it. Auto-classified verdicts never feed the training data, so the model cannot poison itself.
  • Meeting invites render as an invite card (#442), contributed by @Monkey7539. An Outlook forwarded meeting that arrives as a bare text/calendar part used to render as raw VCALENDAR source with the join link buried in it. It now shows what, when, where and organizer, followed by the description.

Fixed

  • Conversations can be dragged to a folder (#130). Threading renders rows through a different component that never had drag wired up, so with conversations enabled no row was draggable at all. Dragging a conversation now moves the whole conversation, resolved from the server rather than from whatever was cached.
  • A render error no longer blanks the page (#441). There was no error boundary anywhere, so any exception during render unmounted the entire app and left an empty page carrying no information. Errors now show what broke, with a reload button and a way to copy the details into an issue.
  • Watch and Delegated labels persist until you clear them (#443), contributed by @salmonumbrella. Replies were treating waiting states as completed work, so threads left their queues on their own.
  • AI actions survive navigation (#428). Starting an AI action and then moving to another message cancelled it.
  • Logging in works on Podman, Kubernetes and other non-Docker networks (#448), and the container starts on a read-only root filesystem (#453). Both shipped in 3.4.3/3.4.4 and are included here.

Upgrading

Pull the new images and recreate. Five migrations run automatically on first boot. No configuration change.

Anti-spam is off until you enable it per account in Settings, so upgrading changes nothing about how your mail is handled.

Don't miss a new mailflow release

NewReleases is sending notifications on new releases.