Releases: postalsys/emailengine
Releases · postalsys/emailengine
Release list
v2.74.0
2.74.0 (2026-07-23)
This release adds per-account compatibility and TLS controls for connecting to non-standard IMAP and SMTP servers, and makes outbound delivery safer: internal errors can no longer cause queued messages to be silently discarded.
Highlights:
- New account settings. Accounts can opt out of IMAP4rev2 for servers whose IMAP4rev2 support misbehaves, and can allow invalid TLS certificates on a per-account basis - for both the IMAP and SMTP connection - instead of relying on the global "ignoreMailCertErrors" setting.
- No more lost outbound mail on internal errors. Delivery permanence is now decided by the actual SMTP response, not by internal status codes, so an RPC timeout or worker restart during a send is retried instead of discarding the queued message. Transient 4xx rejections such as greylisting are also retried instead of being dropped on the first attempt.
- Token minting is gated. While no admin password is set, access tokens can no longer be minted anonymously: the admin UI route requires an authenticated session and the API route refuses unauthenticated callers. The documented headless provisioning flows keep working.
- More resilient IMAP sync. Folders that are listed by the server but reject SELECT (for example Dovecot shared-namespace roots) are parked instead of repeatedly tearing down the whole connection, and servers that drop connections shortly after login no longer trigger rapid reconnect loops.
- Hardened build and setup. The Docker image ships the previously missing root-level CLI modules and is smoke tested before it is published, and the setup script creates production secret files owner-only.
- Dependency updates, including ImapFlow 1.5.0.
Features
- imap: add a per-account IMAP4rev2 opt-out and account-level TLS certificate override (59764fd)
- ui: add the account-level invalid-certificate override to the SMTP settings as well (7d1b9e4)
Bug Fixes
- ci: give the Docker builds a cache backend and smoke test by digest (4554d90)
- ci: smoke-test the image before publishing and harden the allowlist test (c285fcb)
- deps: update dependencies (3370f0a)
- deps: update dependencies (e1256b2)
- deps: update dependencies (imapflow 1.5.0) (8cc45ac)
- docker: ship the root-level CLI modules in the image (a63cb4e)
- gitignore: cover every local env file, not just the exact name (16124d5)
- imap: park phantom folders and throttle short-lived-connection reconnects (da97da3)
- imap: store the connection error response as text, not as a parsed object (3cf8d2e)
- setup: create production secret files owner-only (52f0527)
- submit: retry transient 4xx SMTP rejections and gate token minting on the request principal (1688c86)
- submit: stop discarding queued mail on non-SMTP 5xx errors (f80f475)
- test: provision scope-test tokens as a trusted local caller (20ca781)
- tokens: refuse to mint an access token before an admin password is set (ff3dd47)
Performance Improvements
- docker: cache the dependency install and smoke test the CLI in the image (e275733)
v2.73.1
v2.73.0
2.73.0 (2026-07-20)
Features
- add generic OIDC SSO for admin login (71854d4)
- add group-based authorization for OIDC SSO (c988506)
- add OIDC_FORCED (SSO-only login) and OIDC_LOGOUT (RP-initiated logout) (1751ddb)
- make OIDC post-logout redirect optional (OIDC_POST_LOGOUT_REDIRECT_URI) (ae9169d)
- rebuild the open source license listing (ebe5e90)
- Tailwind v4 + FlyonUI admin UI theme (d648da1)
- theme: centralize the ACE editor fullscreen toggle (bf9a6db)
- theme: centralize the native datalist autocomplete builder (7b737b1)
- theme: convert auth and public layouts to Tailwind/FlyonUI (568de9e)
- theme: convert config core pages to Tailwind/FlyonUI (93f7c06)
- theme: convert Document Store pages to Tailwind/FlyonUI (5b2b687)
- theme: convert internals pages to Tailwind/FlyonUI (06a670e)
- theme: convert OAuth2 config pages to Tailwind/FlyonUI (a787584)
- theme: convert shared partials, replace bootstrap-autocomplete with datalists (eb3fdf1)
- theme: convert the accounts pages to FlyonUI (f54f5bc)
- theme: convert the admin shell to Tailwind v4 + FlyonUI (d9ab031)
- theme: convert the dashboard page to FlyonUI (c4a719c)
- theme: convert the gateways pages to FlyonUI (6b176fa)
- theme: convert the tokens and templates pages to FlyonUI (a650568)
- theme: convert webhooks pages to Tailwind/FlyonUI (77b4438)
- theme: follow the admin theme in the ACE editors (51bc909)
- theme: move the TLS certificate labels to FlyonUI tooltips (eabc578)
- theme: rebuild the public pages as framework-free HTML/CSS/JS (f3a34c0)
- theme: replace ClipboardJS with a central copy-to-clipboard handler (216334d)
- theme: restyle the stat cards to the FlyonUI dashboard idiom (e53dd27)
- theme: retire the Bootstrap legacy clusters and dead assets (836e36f)
- theme: retire the bootstrap-compat shim and jQuery (7669c5c)
- theme: sync the embedded message browser with the admin theme (858fbcd)
- theme: use HSTogglePassword for the secret reveal buttons (2ea2c11)
- ui: add search to the remaining paged admin list views (22ff78f)
- ui: align the Workers page with the list-view conventions (8bb421b)
- ui: apply the account-view toolbar treatment to all detail views (a6d36f0)
- ui: reorganize the account view around actions, status and density (097329e)
- ui: reorganize the admin menu, split settings pages, and redesign the dashboard (4ec4118)
- ui: standardize admin list views with row actions and copyable ids (722244f)
- ui: unify list-view info sections with a page-header subtitle (925d5fa)
- ui: use the row-actions kebab on the Workers table (bdbb6d9)
Bug Fixes
- bump dependencies and refresh generated artifacts (4de7381)
- bump ee-client/sentry-node/bullmq and refresh generated artifacts (b365690)
- bump sentry-node/bullmq/nanoid/eslint and refresh generated artifacts (d9c26df)
- cap webhook delivery attempts with a wall-clock timeout (ca263d7)
- deps: update dependencies (3961788)
- keep dashboard stats counters for the intended retention period (db175f7)
- mint a session sid on every admin login path (e166fbf)
- point documentation links to the learn.emailengine.app docs site (f947b27)
- sso: reject unverified OIDC emails in the admin allow-list (34ff519)
- sso: treat any present email_verified value as a strict boolean (89821cc)
- theme: align the SSO setup buttons on the account security page (aee2d34)
- theme: apply the post-merge release review findings (d36ce1b)
- theme: apply the whole-branch review findings (965e652)
- theme: cap tooltip width so long texts wrap (a805b3b)
- theme: gate TLS certificate provisioning on a usable service domain (ef22689)
- theme: indicate the selected tab in the admin UI tab strips (2aa6d22)
- theme: load the ACE language-tools extension where pages expect it (d3d1592)
- theme: render the API reference as a light island (ddf696c)
- theme: repair the ACE editor toolbar chrome (4f492f1)
- theme: tooltip stacking, empty-bubble gating and badge rounding (bdfea13)
- theme: use a real list for the gateway usage notes (b860c28)
- theme: use standard FlyonUI rounding on the auth pages (96b7028)
- ui: add a visible exit for the ACE editor fullscreen mode ([0378d82](0378d82...
v2.72.4
2.72.4 (2026-07-11)
Bug Fixes
- bump imapflow/bullmq/bull-board/sentry-node/eerawlog/prettier (8f7b6bf)
- clear the connecting flag if loading account data fails during reconnect (8d82167)
- clear the pending changes debounce when closing a subconnection (a286f89)
- disable subconnection when the monitored mailbox no longer exists (e1895d6)
- do not report connectError when pause() interrupts a connection attempt (4d38e4f)
- drop the reconnect timer handle when closing an IMAP connection (9f46c77)
- ignore \NonExistent folders in mailbox listing (7ec96cf)
- prevent overlapping and revived subconnection reconnect cycles (5754c07)
- process refreshed folder listings so new folders emit mailboxNew (247c325)
- reconcile disabled and active subconnections in setupSubConnections (85ebb54)
- refresh folder listing when a listed mailbox is missing on SELECT (1e54d32)
- require an exact path match in the missing-mailbox verification LIST (54e23c4)
- reset IMAP reconnection backoff only after a successful sync (7138dab)
- reset subconnection backoff only after the monitored mailbox is opened (f2bf297)
- resolve the mailbox sync promise when a concurrent operation already selected the mailbox (7327dcc)
- resolve the mailbox sync promise when opening fails before the sync starts (c2268af)
- retry transient account data load failures during reconnect (7f18d4b)
- revive missing-folder subconnections when the folder is re-created (254fce4)
- scope the re-entrant open latch to the connection that emitted the event (627b6ee)
- skip mailboxes that can not be selected during account sync (eaf09c1)
- skip re-entrant mailbox open events while onOpen is already running (6d06b09)
- stop opening IMAP connections for accounts paused while connecting (128aef3)
- untrack bailed subconnection clients and harden the revival trigger (086a585)
- untrack the IMAP client when connect() bails for a paused account (cface66)
- update connection tracking when replacing a previous IMAP client (8e143c2)
v2.72.3
2.72.3 (2026-07-06)
Bug Fixes
- bump imapflow to 1.4.4 (dedupe nodemailer/iconv-lite) (5acc8cd)
- bump imapflow/mailparser/mailsplit/email-ai-tools (collapse iconv-lite) (51dcffb)
- bump libmime/mailparser/smtp-server/pubface (uniform nodemailer) (eee89bb)
- constant-time MS Graph clientState check and escape unsubscribe email (3def225)
- escape Redis glob metacharacters in account-scoped SCAN patterns (603d9db)
- escape untrusted email fields in message browser to prevent stored XSS (1159cc1)
- gate hosted auth form with a single-use nonce and probe cap, harden serviceSecret (7ea4ff7)
- harden hosted authentication form (SSRF gate, fail-closed HMAC, XSS) (4267df7)
- HTML-escape json Handlebars helper to prevent stored XSS in error logs (af2c153)
- override grunt's transitive js-yaml to 3.15.0 (GHSA-h67p-54hq-rp68) (024a923)
- stop logging the MS Graph access token on HTTP 401 (f2f0300)
- update dependencies (@postalsys/ee-client 1.3.2, nodemailer 9.0.3, bullmq 5.79.2, @sentry/node 10.63.0, @bull-board 8.0.2) (b954f67)
- update dependencies (email-text-tools 2.4.10, email-ai-tools 1.13.10) (73df05c)
- use constant-time comparison for secret and MAC checks (453caf3)
- verify HMAC signature on the human-facing unsubscribe routes (e30be83)
v2.72.2
v2.72.1
v2.72.0
v2.71.0
2.71.0 (2026-06-15)
Features
- add anonymized feature beacon to license validation (954d92a)
- disable deprecated Document Store by default behind a feature gate (8790f75)
Bug Fixes
- defer export worker job consumption until startup recovery completes (a21b0a5)
- fail export when a folder cannot be indexed (36c9c9d)
- filter transient fetch failures from Sentry and retry DNS errors (883b9b4)
- retry transient errors in API-account batch export path (6cba7c7)
- translate OAuth scope error page across 6 languages (4ae1919)
- upgrade joi to 17.13.4 and @postalsys/certs to 1.0.15 (GHSA-q7cg-457f-vx79) (6ec77e5)
v2.70.0
2.70.0 (2026-06-11)
Features
- allow enabling Sentry error reporting from the admin UI (a4076a4)
- replace Bugsnag with self-hosted Sentry for error tracking (62de831)
- tag Sentry error reports with instance id and license key (2e9683f)
Bug Fixes
- align API response schemas with actual responses and fix uncovered API bugs (abacbf6)
- align remaining API response schemas with actual responses (06136ab)
- assign unassigned accounts after license activation (5677977)
- do not crash at startup when a feature flag env variable is set to a falsy value (98ad979)
- report correct nextAttempt time for queued messages (d5ebdfb)
- resolve code review findings in Gmail bulk ops, exports, webhooks, and schemas (f0ddb46)