- Fix: Workspace SMTP integrations now connect to servers that advertise only
AUTH LOGIN(such as Azure Communication Services) — the raw SMTP sender hardcodedAUTH PLAINand was rejected with a 504 before credentials were ever checked. It now reads the AUTH mechanisms advertised in EHLO and uses LOGIN when PLAIN isn't offered, preferring PLAIN when both are available (#368). - Fix: Unsubscribing from the notification center works again. The widget's "Unsubscribe" action and per-list toggle (and the console) now post to a dedicated
/unsubscribeendpoint, while/unsubscribe-oneclickis reserved for the RFC 8058 mail-client one-click carried in theList-Unsubscribeheader (it still accepts the legacy JSON body as a backward-compatible shim). When v34.0 made/unsubscribe-oneclickstrictly RFC 8058 for the Gmail/Yahoo one-click fix, the notification center's JSON request was rejected with400 "Invalid request"and contacts stayed subscribed (#371). - Fix: A freshly installed root account no longer crashes the console on first login. Before any workspace existed,
user.mereturned"workspaces": nullinstead of[]for theROOT_EMAILuser — the root path returns the workspace list straight from the database, which is a nil slice when empty — and the console crashed withCannot read properties of null (reading 'length')instead of redirecting to workspace creation. The repository now returns an empty (non-nil) slice so the API always serializes[], and the console normalizes a nullworkspacesto an empty array as a safeguard (#367). - Fix: An
mj-button(ormj-social) whose inner padding was edited in the visual editor no longer vanishes in Gmail — the inner-padding object was compiled into the CSS as a Go map literal (padding:map[bottom:0px top:0px]) that strict clients reject; it now compiles to a valid CSS shorthand, and the editor no longer stores padding as an object (#369).