Repository navigation
v1.1.1
⚠️ Upgrade notes
- Building from source needs more tools. DKIM and ARC now use
aws-lc-rs, which needs a C toolchain, and CMake and NASM on Windows. Node 26 replaces Node 24 for building the web client. Nothing changes if you run the published image or a release archive. - Authentication results can read differently. Bounces (mail with an empty sender) now report their SPF result as
smtp.helo. Anything that parsesAuthentication-Resultsheaders may need to allow for this. - The database gains a table for IMAP metadata. The migration runs by itself at startup.
New
- IMAP METADATA (RFC 5464). Private and shared entries on mailboxes and on the server.
- IMAP NOTIFY (RFC 5465). Mail programs are told between commands about changes to the selected mailbox, other mailboxes, mailbox names, subscriptions and metadata.
- IMAP REPLACE (RFC 8508). Swaps one message for a new one in a single step.
- SMTP LIMITS (RFC 9422). EHLO announces the
MAILMAXandRCPTMAXlimits.
Security
- Token logins respect second factors, and sign-in limiter counts survive a repeated password.
- DANE checks each certificate against its own bytes.
- NOTIFY sessions recheck the sign-in.
- Forged
Authentication-Resultsheaders are stripped in every spelling. - Parts added after an S/MIME signature end the verification.
- Admin-only plug-ins get no mail access, suspended fail-closed plug-ins still hold mail, and plug-in hosts need a saved setting.
- The Cloudflare token is sealed.
- IMAP and ManageSieve limit how much one command may hold in memory.
Fixed
Crashes
- Header names, Sieve captures, notify addresses, dates, calendar durations and stored rules no longer crash the server on multibyte or extreme input.
Lost or misdirected mail
- Queued mail survives storage errors, and lost content is reported.
- Redirects and held mail to local recipients are delivered here.
- Temporary AUTH failures are retried, and a refused session tries the next MX host.
- Junk under a redirect-only script stays in Junk.
- A partial failure no longer makes senders redeliver to everyone.
Webmail
- Folder actions apply to the current folder only, so "Delete forever" no longer destroys a whole conversation.
- Drafts can be reopened, aren't lost on a failed save or a new composer, and autosave while you type.
- Encryption survives Undo and replies.
- Decrypted attachments keep working when a conversation reloads, so running downloads are no longer cancelled, and their previews now open.
- Names with commas, forwarded attachments, multi-part bodies and files with a Content-ID work.
- Offline sends keep their schedule, and only one tab replays the outbox.
- Labelled conversations stay listed, and lists keep their rows on refresh.
Everything else
- Single-occurrence calendar invitations keep the series.
- Imports report lost connections, and a restore touches nothing until it can finish.
- An invalid old setting no longer affects other settings.
- JMAP state covers shared mailboxes.
- Further IMAP, Sieve, calendar and admin fixes, Docker corrections, and documentation that matches the code.
Improved
- Mail parsing. The parser moves to
mail-parser1.0, which follows RFC 8621 for message structure. Some inline images no longer count as attachments, MIME boundaries are matched strictly, and damaged messages are read more reliably. Existing attachment and blob links keep working. - DKIM. Relaxed body canonicalization now ignores whitespace-only lines at the end of the body, which had produced signatures that other servers rejected.
Under the hood
- Dependencies updated to their latest major versions:
mail-auth0.15,mail-parser1.0,mail-builder2,parking_lot0.13,sysinfo0.40 and Node 26. The RustCrypto crates stay untilrsa0.10 andcms0.3 are released. mail-authdropped its report code, so DMARC, ARF and TLS-RPT reports now live in this project, and fourzipadvisory exceptions are gone.- Much faster tests: a full server run drops from 156 s to 25 s, a rebuild after a library change from 213 s to 16 s, and the build cache from 38 GB to 3.7 GB.