[0.16.18] - 2026-08-17
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
- Reporting:
inboundReportMaxSizesetting, which bounds the size of a decompressed inbound DMARC or TLS report (default 25MB). - RocksDB:
cacheSizesetting, which bounds the total memory shared by the block caches of every column family (default 128MB).
Changed
- ASN & GeoIP: Default data source URLs now point at the ip-location-db GitHub releases, as the previously used npm packages are no longer updated. Existing installations keep their configured URLs and should update them following the ASN and GeoIP documentation.
- JMAP:
Identity/getkeeps identities in sync with the account's e-mail addresses. - MTA: Queue scheduler no longer rescans the queue from the earliest pending event and coalesces bursts of delivery completions into a single scan.
- RocksDB:
- Column families are tuned for the access pattern of the data they hold.
- Range iteration uses bounded iterators and no longer reads values when only keys were requested.
Fixed
- JMAP:
- Setting
uploadTtlto 1ms triggers panic. CalendarEvent/setdoes not assignorganizerCalendarAddressnor send scheduling messages when an event is created with participants.CalendarEvent/getomitsisOriginwhen it is listed explicitly inproperties.CalendarEventNotification/changesandFileNode/changesreject withcannotCalculateChangesthe state that/getreturned for an account with no change history.CalendarEvent/setandContactCard/setdo not write a vanished tombstone for the previous CalDAV/CardDAV href whencalendarIdsoraddressBookIdsmoves an item between collections.
- Setting
- CalDAV: Attendee addresses that percent-encode a display name into the
mailto:URI are queued verbatim. - Calendar: Recurring events disappear from CalDAV time-range
REPORTs and JMAPCalendarEvent/queryresults a few years after their first occurrence. - WebDAV:
- When a file node references a parent folder that no longer exists, any request on a file collection panics.
MOVEon a folder honors aDepthheader of0or1instead of always moving the whole subtree.
- MTA:
- DSN bounces are emitted with a malformed
Message-IDwrapped in doubled angle brackets. - Delivery to any MX host whose name is an IDN A-label fails permanently.
- Queue strategy and quota expressions that branch on
sourcenever match at enqueue. - MTA-STS:
- Policies in
testingmode are enforced, turning any TLS error into a permanent failure. mxpatterns published as U-labels never authorize the MX host they name.
- Policies in
- DMARC:
- Alignment compares identifiers in their A-label form.
- External reporting addresses published as U-labels are rejected as unauthorized.
- DSN bounces are emitted with a malformed
- Spam filter:
- Some rules misfire on internationalized addresses when the envelope and the headers spell the same domain in different label forms.
- Punycode labels that do not re-encode to the label they came from are no longer decoded.
- WebPush: Validate push URL and use
application/octet-streamasContent-Typefor encrypted payloads. - Directory:
- Local group membership is cleared when the external directory is configured with a group claim or attribute that it does not return.
- LDAP: Directories that store aliases as additional values of the primary address attribute provision no aliases.
- Mail addressed to a domain alias is rejected with
550 Relay not allowed, unless the domain's primary name happened to be resolved earlier and is still cached.
- RocksDB:
bufferSizesetting was applied to the unused default column family and had no effect. - Sieve:
includestatements fail to find system and user global scripts whose name contains uppercase characters. - Task manager:
totalDeadlineis measured from the time a task was created instead of its first failed attempt.