[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 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.dkimSignDomainsetting, which defaults to the account's own domain.
Fixed
- JMAP:
CalendarEvent/setrequests that ask for scheduling messages are rejected with aforbiddenerror when the account cannot send them.Calendar/getandAddressBook/getreturn every property when thepropertiesargument is omitted ornull.- EventSource
pingevents 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
STATUSorFETCHbatch 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:REQUESTcarrying theRECURRENCE-IDinstead of aMETHOD:ADD. - Sieve:
fileinto :specialuseandspecialuse_existsaccept special-use attributes in the\Trashform. - 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 withEPROTONOSUPPORT. - OpenTelemetry: log exporter does not include the parent span's attributes.