v0.16.21
QwenLM/Qwen-MM-Pluginsv0.16.21Sep 6, 2026by github-actions[bot]
Upgrading?
AI Summary
A patch release fixing various bugs across JMAP, IMAP, WebDAV, MTA, and Sieve components, including handling aggregate reports, pipelined commands, and OAuth authentication.
Key Highlights
- Fixed JMAP calendar and address book property returns
- Fixed pipelined IMAP STATUS/FETCH command responses
- Fixed Sieve user interpreter DKIM signing
- Fixed LDAP unauthenticated bind handling
- Fixed network listener fallback for IPv6
Full Release Notes
## [0.16.21] - 2026-09-06 If you are upgrading from v0.16.x, replace the binary (or run `docker pull`). If you are upgrading from v0.15.x and below, please read the [upgrading documentation](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING/v0_16.md) for more information on how to upgrade from previous versions. ## Added ## Changed - Sieve: Messages generated by user scripts are DKIM signed through the new `SieveUserInterpreter.dkimSignDomain` setting, which defaults to the account's own domain. ## Fixed - JMAP: - `CalendarEvent/set` requests that ask for scheduling messages are rejected with a `forbidden` error when the account cannot send them. - `Calendar/get` and `AddressBook/get` return every property when the `properties` argument is omitted or `null`. - EventSource `ping` events advertise the interval in seconds rather than milliseconds. - Calendar synthetic ids returned when expanding recurrences identify an occurrence by its recurrence id. - IMAP: Every command in a pipelined `STATUS` or `FETCH` batch receives its tagged completion, instead of the first failing command dropping the responses for all commands queued behind it. - WebDAV: Accounts without a storage quota no longer advertise a 4 GiB limit in `DAV:quota-available-bytes`. - MTA: Inbound DMARC and TLS aggregate reports that a reporter sends more than once are imported again as a duplicate entry. - Spam filter: Domain and URL blocklists are queried only for text written as a link. - iTIP: Detaching an occurrence that the recurrence rule already generates is sent as a `METHOD:REQUEST` carrying the `RECURRENCE-ID` instead of a `METHOD:ADD`. - Sieve: `fileinto :specialuse` and `specialuse_exists` accept special-use attributes in the `\Trash` form. - LDAP: Active Directory servers that answer an unauthenticated bind (a non-empty DN with a zero-length password) with success no longer authenticate accounts without a password. - Network: Listeners bound to the unspecified IPv6 address (`[::]`) fall back to IPv4 when socket creation fails with `EPROTONOSUPPORT`. - OpenTelemetry: log exporter does not include the parent span's attributes. <hr /> ### Check binary attestation [here](https://github.com/stalwartlabs/stalwart/attestations/45587073)
Related Repositories
public-apis/public-apis★ 491,146
A collective list of free APIs
NousResearch/hermes-agent★ 255,990
The agent that grows with you
yt-dlp/yt-dlp★ 200,094
A feature-rich command-line audio/video downloader
microsoft/markitdown★ 191,500
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPT★ 187,704
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.