App Suite Releases
  • 8.47
  • 8.35
  • 7.10.6
Imprint
  • 8.47
  • 8.35
  • 7.10.6
Imprint
  • Release 8.52Upcoming
  • Release 8.51
  • Release 8.50
  • Release 8.49
    • Noteworthy Changes
      • Important Changes
      • App Suite Middleware
    • Changelogs
      • App Suite UI
      • App Suite Middleware
      • Additional Components
        • AI Service
        • OX Guard UI
        • Switchboard
    • Helm Charts
      • AI-Service documentation
      • App Suite Stack Chart
      • Helm Chart core-cacheservice
      • Helm Chart core-documentconverter
      • Helm Chart core-imageconverter
      • core-mw
      • Switchboard
  • Release 8.48
  • Release 8.47LTS
  • Release 8.46
  • Release 8.45
  • Release 8.44
Maintained. Older releases are best effort.
Upcoming
Not released yet
LTS
Long-term support branch

App Suite Middleware

8.49.157 - 2026-08-13

Fixed

  • Fall back to database when the folder cache transiently returns null so folder look-ups keep their non-null-or-throw contract (support#1599)

8.49.156 - 2026-08-12

Changed

  • Update the documentation-properties plugin to 6.0.3 so the plugin classpath survives jackson 2.22.1 from plugin-bom 2.2.0

Fixed

  • Do not purge calendar data when a folder cannot be resolved (support#1599)

8.49.155 - 2026-08-11

Fixed

  • Do not report a failed IMAP quota look-up as exceeded quota (support#1636)

8.49.153 - 2026-08-06

Fixed

  • Keep writing a datamining report when a database schema is unreachable (support#1618)

8.49.152 - 2026-08-06

Fixed

  • Close the static service registry mock that leaked into other POP3 tests
  • Correct the misspelled mail capability cache idle time property, keeping the old name as a fallback
  • Expire a failed or degraded mail server capability probe instead of caching it forever

8.49.149 - 2026-08-05

Added

  • Documentation for the mail account property infixes
  • Honor the ".secondary" property infix alongside ".primary" for mail accounts

Fixed

  • Treat empty and whitespace-padded mail account property values correctly
  • Resolve allowFetchSingleHeaders per mail account in the conversation view

8.49.147 - 2026-08-03

Fixed

  • Release the IMAP debug logger on every path that gives up an IMAP session (#5)

8.49.145 - 2026-08-01

Fixed

  • IMAP command injection through user flags and the headers request parameter

8.49.143 - 2026-07-30

Added

  • Redirect reads to the master while a read replica reports broken or excessive replication lag (#4)

Fixed

  • Restore replica staleness check by tracking the replication monitor counter process-locally (support#1599)

8.49.142 - 2026-07-30

Added

  • Redirect reads to the master while a read replica reports broken or excessive replication lag (#4)

Fixed

  • Restore replica staleness check by tracking the replication monitor counter process-locally (support#1599)
  • Validate HTTP header names against RFC 9110 token rules in the Grizzly 2.4 codec (support#1603)

8.49.141 - 2026-07-29

Fixed

  • Always provide the mail's display date, also for nested messages (support#1598)

8.49.136 - 2026-07-24

Fixed

  • Do not queue messages for a second, delayed publication when message buffering is disabled (support#1584)
  • Report exact attachment sizes for composition space drafts (support#1585)

8.49.135 - 2026-07-23

Fixed

  • Propagate affected folders in folder map invalidation messages so remote nodes drop them for every user (support#1584)

8.49.134 - 2026-07-22

Fixed

  • Never skip sender validation when transmitting via action=new (support#1531)

8.49.133 - 2026-07-22

Fixed

  • Repoint openapi plugins to gitlab.com registry and bump to latest
  • Validate From/Sender ownership on mail bounce (support#1531)
  • Throw FOLDER_NOT_FOUND instead of NPE for missing calendar folder (support#1577)
  • Guard composite LDAP filter construction against non-representable search term operands (support#1578)
  • Single-pass, escaping URI token compression to keep proxy registrations round-trip safe (support#1582)

8.49.129 - 2026-07-16

Changed

  • SCR-1793: Harden Redis connection lifecycle against stale/orphaned connected clients

Fixed

  • Store DB-assignment and schema-update-state cache entries as plain per-context/per-schema keys instead of one global group hash (support#1562)

8.49.128 - 2026-07-14

Fixed

  • Scoped Entity2ACL look-up caches to the requesting session and account

8.49.127 - 2026-07-10

Fixed

  • Bump About-box default copyright year to 2026 (support#1553)

8.49.126 - 2026-07-10

Fixed

  • Restored xs:date/nillable for SOAP birthday and anniversary (support#1551)

8.49.123 - 2026-06-25

Changed

  • Add owner-trace diagnostic logging for filestore snippets (support#1329)

Fixed

  • Make a failed scheduled-mail failure-notification visible (support#1515)

8.49.122 - 2026-06-23

Fixed

  • DB pool exhaustion during autoscaler scale-up (support#1477)
  • Add opt-in overload protection for cache-outage DB stampedes (support#1517)

8.49.121 - 2026-06-23

Fixed

  • ExistingUISettingsSecret checksum and document existing*Secret values
    • Backport of main commit ab96e610c2f to stable-8.49.
    • The existingUISettingsSecret was missing from core-mw.existingSecretsChecksum, so content changes to that secret did not trigger a rolling restart unlike the other existing* secrets. Added the missing block.
    • Also added a guide on the existing*Secret values to the chart README, clarified the additive-vs-replace behavior in the values.yaml comments, and bumped the chart version to 6.20.3.

8.49.120 - 2026-06-19

Fixed

  • Add missing import for LogProperties in TransportPerformer
  • Retry/back-off for retryable mail access errors when transporting scheduled mails (support#1495)
  • Stop DB heart-beat after a failed keep-alive instead of retrying on a dead connection (support#1501)

8.49.119 - 2026-06-03

Added

  • SCR-1714: PBSR-1613: REST Interface to Retrieve Effective Shared Account Permissions

8.49.118 - 2026-06-03

Fixed

  • CP-572: Avoid full Redis key-space scan when closing sessions by user/context filter

8.49.117 - 2026-05-29

Fixed

  • IOL-2841: Reconnect mail access when attachment handling takes too long (2)

8.49.116 - 2026-05-29

Added

  • PBSR-1677: Overall "get" Method to List all Shared Account Permissions for Target

Fixed

  • IOL-2841: Reconnect mail access when attachment handling takes too long

8.49.115 - 2026-05-28

Fixed

  • Scheduled mail date_to_send returns null in action=all when IMAP server drops $CurrentlyScheduled user flag (support#1444)

8.49.114 - 2026-05-28

Fixed

  • Merge schema lists in Java to avoid collation mismatch in update task listing (support#1467)

8.49.113 - 2026-05-28

Fixed

  • Data: URL inline images rendered with empty src in display path (support#931)

8.49.112 - 2026-05-21

Fixed

  • Movecontextdatabase fails on large contexts due to configdb wait_timeout (support#1218)

8.49.110 - 2026-05-21

Fixed

  • Re-verify cached schema state when blocking updates remain pending (support#1162)
  • Use more generic error code in failure notification to avoid possibly exposing sensitive information (support#1461)

8.49.109 - 2026-05-20

Fixed

  • NPE in OXFolderManagerImpl.parseTruncated() for truncated 'meta' folder column; enlarge meta BLOB to MEDIUMBLOB (core#512)
    • SCR-1709: Enlarge the "meta" column from BLOB to MEDIUMBLOB for the "oxfolder_tree" and "del_oxfolder_tree" tables
  • Externalize data: URL inline images into managed files (support#931)
  • Sanitize illegal filename characters when saving mail attachments to Drive (support#1459)
    • The "Save to Drive" action (PUT /mail?action=attachment) only replaced "/" with "_" in the attachment file name, leaving other characters that are illegal in file-storage names (":", "", "?", "*", """, "<", ">", "|") to flow down into the storage layer which then rejected the request with FILE_NAME contains illegal characters.
    • Reuse FilenameValidationUtils.sanitizeName to replace every illegal character with "_", trim trailing dots/whitespace and fall back to a generated default name for reserved names; use MailMessageParser.generateFilename as the fallback so the original sequence id and MIME type drive the substitute name.
    • Adds FilenameValidationUtilsTest covering the colon scenario from the support ticket plus the existing replacement, trim, reserved-name and Unicode cases.
  • Send failure notification for scheduled mails even when transport setup fails (support#1460)
  • Pre-upgrade task now enumerates legacy single-schema pools (support#1462)
  • Harden Redis Failsafe defaults to prevent bulkhead-full floods (support#1464)
    • The previous defaults turned a brief Redis latency spike into a mass REDIS-0014 ("Too many concurrent commands") flood:
    • bulkhead.maxWaitTimeMillis = 5 made the bulkhead a hard reject limit instead of providing backpressure
    • breaker.enabled = false left no recovery net once the bulkhead saturated
    • retry.maxRetries = 0 propagated single transient reconnect errors straight to callers
    • The common circuit breaker's failure predicate ignored BulkheadFullException, so sustained saturation never tripped it
    • Changes:
    • RedisProperty: bulkhead.maxWaitTimeMillis 5 -> 2000, breaker.enabled false -> true, retry.maxRetries 0 -> 1
    • FailsafePolicies: extend the common breaker predicate to include BulkheadFullException (and the wrapped TOO_MANY_COMMANDS code) so sustained bulkhead-full conditions open the breaker and let the end-point recover
    • Redis.yml: align documented defaults with RedisProperty (connect.breaker thresholds/delay and the three new defaults)
    • Add FailsafePoliciesTest covering all three predicates incl. the new bulkhead-full case

8.49.108 - 2026-05-20

Fixed

  • User proper order for charset and collation

8.49.107 - 2026-05-12

Added

  • Translation updates 8.49: cs_CZ, da_DK, de_DE, el_GR, en_GB, es_ES, es_MX, fi_FI, fr_CA, fr_FR, hu_HU, it_IT, ja_JP, lv_LV, nl_NL, pl_PL, pt_BR, ro_RO, ru_RU, sk_SK, sv_SE, tr_TR, zh_CN, zh_TW

Fixed

  • Orphaned mail accounts with oauth=0 disappear from account list
    • Reject 0 as a valid OAuth account identifier across all mail account read/write paths (DB layer, cache codec, user-copy provisioning) and add an update task that migrates pre-existing 0 values to NULL.

8.49.106 - 2026-05-07

Fixed

  • Properly handle null values in jslob storage

8.49.105 - 2026-05-05

Added

  • Optional aggressive ACL cleanup when revoking a deputy permission (support#1004)
    • Introduces "com.openexchange.deputy.provider.imap.aggressiveAclCleanupOnRevoke" (default: false). When enabled, the revocation flow unconditionally removes the deputy's ACL entry from every considerable personal mailbox instead of consulting the ACL directory captured at grant time.
    • This is intended for deployments that grant ACLs solely via the deputy feature: because servers like Dovecot inherit ACLs from parent folders and from INBOX (acl_defaults_from_inbox), the captured directory cannot reliably distinguish deputy-induced from pre-existing ACLs once subfolders are involved. Any remaining ACL entry for a former deputy is then treated as a leftover and wiped.
    • Property is honored by both the IMAP-direct (DeputyImapProvider) and the DoveAdm-based (DoveAdmProvider) deputy provider.

Fixed

  • Movecontextdatabase failed with "Table '<oxdb>.context' doesn't exist"
    • When disabling the context at the start of doMoveDatabaseContextInternal(), the source user-DB connection (oxDbWriteCon) was passed to myEnableDisableContext(), which executes UPDATE context SET enabled = 0. The context table only exists in configdb, so the statement was issued against the user schema (e.g. oxdatabase_444) and failed.
    • Pass null instead so myEnableDisableContext() acquires its own configdb write connection -- restoring the pre-e316526b33a behaviour of disable(ctx, reason). The mutual exclusion of concurrent provisioning is already handled by the surrounding context claim, so no transactional coupling with oxDbWriteCon is needed here.
    • Closes appsuite/platform/core#509
  • Invalidate cached MailAccess instances when mail account is changed (core#504)
    • After a SOAP provisioning operation that changes a user's PrimaryEmail, the generated iOS/MacOS onboarding mobileconfig profile contained the previous login in IncomingMailServerUsername / OutgoingMailServerUsername, while EmailAddress reflected the new address. Cause: the node-local SingletonMailAccessCache holds MailAccess instances whose MailConfig has the login eagerly populated from the MailAccount and was not invalidated when the underlying MailAccount or user changed; the cache only expired via its idle timeout.
    • CachingMailAccountStorage.invalidateMailAccount(s) now also clears the node-local MailAccess cache for the affected user and broadcasts a cluster-wide invalidation event over the existing MAIL_SESSION_EVENTS channel, so other nodes drop their cached MailAccess instances too.
    • New MailAccessCacheInvalidator listens on the same channel and drops cached MailAccess entries on remote events.
    • New MailSessionCache.fireMailCacheInvalidationEvent publishes the event unconditionally (in contrast to clearFor, which only publishes when the publishing node has matching local sessions - not the case for the admin node performing SOAP provisioning).
    • Defense in depth: MailOnboardingProvider now refreshes the MailConfig via MailConfig.getConfig(...) analog to the existing TransportConfig refresh, so the onboarding plist is correct even if the cache invalidation does not reach this node.

8.49.104 - 2026-05-04

Added

  • PBSR-1677: Overall "set" Method to Apply all Shared Account Permissions for Target

8.49.103 - 2026-05-04

Added

  • Resolve plist signing keystore via KeyStoreService for k8s secret rotation

8.49.102 - 2026-04-30

Changed

  • Added possibility to log all connection-using thread on "too many connections" error (support#1363)
    • Changed: Added possibility to log all connection-using thread on "too many connections" error - /appsuite/support#1363
    • Changed: Add jitter/offset to periodic (general) clean-up jobs to avoid start burst - /appsuite/support#1363
    • Fixed: Reduce configdb pressure of nightly cleanup runs - appsuite/support#1363
    • Mitigates the synchronized configdb-connection burst at the beginning of the nightly cleanup window that surfaces as DBP-0001 / "too many connections" against the cluster:
    • Mix a per-node salt (hostname + random component) into the deterministic per-job offset so that the same job is started in a different slot on every pod, preventing the cluster-wide synchronized burst that pure jobId.hashCode()-based offsets produced.
    • Make the per-job schema concurrency configurable via com.openexchange.database.cleanup.schemaConcurrencyLevel (default 4 instead of the previously hard-coded 10), which is the main multiplier for parallel configdb access per pod.
    • Add a global hard cap on concurrent configdb schema look-ups via com.openexchange.database.cleanup.maxConcurrentSchemaLookups (default 8), independent of concurrencylevel/schemaConcurrencyLevel.
    • Pre-resolve representativeContextId -> PoolAndSchema in a single batch lookup per cleanup run and pass it through to CleanUpJobRunnable, so per-schema cleanup no longer issues an additional configdb roundtrip per schema.
    • Add a soft submission ramp-up at the start of the schedule window via com.openexchange.database.cleanup.rampUpMillis (default 60s) on top of the existing jitter, eliminating the exact window-boundary spike independent of hash collisions.
    • Treat Category.CATEGORY_SERVICE_DOWN (e.g. DBP-0001 "Cannot get connection to config DB" / "Cannot create pooled object") as retry-able with exponential back-off and jitter both for per-schema execution and for uncached configdb schema look-ups, so the pool can recover instead of being hammered while saturated.

8.49.98 - 2026-04-28

Changed

  • Avoid premature permit release (core#497)

Fixed

  • Limit number of concurrent transport attempts for scheduled mails (core#497)

8.49.96 - 2026-04-24

Added

  • German translation updates version 8.49

Fixed

  • IAE-133: Orderly apply punycode decoding for OAUTHBEARER user name if "com.openexchange.mail.filter.punycode" is set to "true"

8.49.94 - 2026-04-23

Added

  • "davx5manual" onboarding scenario for manual DAVx5 Select setup
  • Expose "davx5" capability when both DAVx5 onboarding scenarios are enabled

8.49.93 - 2026-04-22

Fixed

  • Prevent possible IMAP injection vulnerability (core#502)

8.49.92 - 2026-04-22

Fixed

  • Corrected database query for loading permission records into cache (core#501)
  • Prevent possible IMAP injection vulnerability (core#502)

8.49.91 - 2026-04-22

Added

  • PBSR-1603: Support migration of user accounts with deputy permissions to shared accounts
  • SCR-1693: New Configuration Property 'com.openexchange.saml.validationClockSkew'
  • GUARD-520: Support for hidden recipients in PGP messages
  • Add DAVx5 Select integration for Android CalDAV/CardDAV onboarding
    • SCR-1678: Added new bundle com.openexchange.davx5.rest for DAVx5 Select integration
    • SCR-1679: Removed Sync App onboarding bundle
    • SCR-1680: Introduced new REST endpoint for DAVx5 Select configuration
    • SCR-1681: Added DAVX5 constant to BuiltInProvider enum and deprecated SYNC_APP
    • SCR-1682: Replaced Sync App with DAVx5 Select in Android onboarding scenarios
    • SCR-1683: Added configuration properties for DAVx5 Select integration
  • German translation 8.48
  • Translation updates 8.48: cs_CZ, da_DK, el_GR, en_GB, es_ES, es_MX, fi_FI, fr_CA, fr_FR, hu_HU, it_IT, ja_JP, lv_LV, nl_NL, pl_PL, pt_BR, ro_RO, ru_RU, sk_SK, sv_SE, tr_TR, zh_CN, zh_TW

Changed

  • Added command-line tool dovecotpushunregisterall to unregister Dovecot Push for all users
  • Added support for informal language preference - /appsuite/platform/core/merge_requests/4480
  • Build descriptive app-specific password names during DAVx5 onboarding
  • SCR-1689: Updated Netty libraries from v4.1.130 to v4.1.131
  • SCR-1691: Added command-line tools for mail signatures
  • Updated core-mw chart dependencies
    • Updated Collabora chart to v1.1.60
  • Use module-agnostic capabilities in shared accounts
  • Ignore invalid vCard version string and fall back to version 3.0 (core#489)
  • Only match against calendar user if necessary when looking up overlapping events (core#494)
  • Provide details about stored event on UID conflict errors (2) (support#1070)
  • Ensure consistent connection pool state (support#1363)

Removed

  • Remove com.openexchange.davx5.rest bundle and adopt lean configuration for DAV onboarding providers
    • SCR-1687: Renamed DAVx5 Select configuration properties
  • Remove discontinued OX Mail App and Mobile API Facade
  • Obsolete validating interceptor for Jitsi meetings (support#1264)

Fixed

  • PBSR-1664: Orderly consider mail login resolver when dealing with a user's ACL name
  • Yield OR terms from mail category rule for batch-wise processing (support#1099)
  • Skip system permissions when inheriting permissions for mail subfolders
  • Stray placeholder in SQL UPDATE for sent folder in RdbMailAccountStorage
  • Fix com.amazonaws build.properties path
  • Keep user in recipient list when replying to a mail in a shared folder (core#473)
  • Avoid writing periodic save-points (by default) to avoid possible access problems (core#486)
  • Detect Java version without additional JVM options (core#490)
  • Ensure to store normalized recurrence id in series master event (core#491)
  • Orderly read values from result set while initializing permissions (core#493)
  • More sophisticated delta generation for subscribed iCalendar feeds (core#495)
  • Merge multiple results during peer attendee lookup (core#496)
  • Limit number of concurrent transport attempts for scheduled mails (core#497)
  • Don't skip shared folders when listening for incoming scheduling mails (core#498)
  • Skip empty or null result session list while gathering removable sessions (core#499)
  • Also allow possible CR?LF sequences in CSS value portion (core#500)
  • Lenient behavior when dropping ACL permission (leftovers from deputy permission) from considerable mailboxes (support#1004)
  • Only consider effective calendar user during conflict checks for incoming scheduling actions (support#1070)
  • Don't drop stack trace if "includeStackTraceOnError=true" is present in request parameters (support#1166)
  • Orderly handle 'fields' parameter when acknowledging alarms (support#1326)
Prev
App Suite UI
Next
Additional Components