Repository navigation
Releases
1.26.2
1.26.2 (10/22/2026)
This is a security patch release. Eight eMudhra intermediate certificates had their private keys compromised, so an attacker holding one could impersonate any mail server or website. (https://emudhra.we-have-a-problem.com/)
The previous release (1.26.1) updated Electron, and this release ensures that Mailspring's sync engine delegates trust decisions to the system certificate chain on every platform and for every connection (IMAP, SMTP, Caldav, etc). MacOS and Windows invalidated the eMudhra certificates by adding them to a separate "distrust" policy store, and this release ensures that Mailspring consults that list and well as the certificate trust chain when opening secure connections.
Bug Fixes:
- Fixed emails that declare a dark color scheme turning the message background black. (#2988)
- Fixed the Back and Close buttons in account setup not responding to clicks.
- The MCP server's
reply_to_threadtool now loads the message body before quoting it. - On macOS, fixed the Darkside theme's window controls sticking to the top of the window. (#2984) Thanks @AlexandreAgrn!
- Fixed calendar and contacts sync leaving a network connection open after every request, which piled up hundreds of open sockets per account over time. Thanks @Alintya.
1.26.1
This is a security patch release. It updates Electron to 44.9.1, which distrusts eight eMudhra intermediate certificates whose private keys were compromised. An attacker holding one of those keys could impersonate any mail server or website. (https://emudhra.we-have-a-problem.com/)
Security:
- Updated Electron to 44.9.1 to block the compromised eMudhra intermediate certificates.
- On Linux, tray icons are converted with ImageMagick without going through a shell. (#2934)
Bug Fixes:
- Fixed Mailspring failing to start when the interface language is set to Luxembourgish. (#2954) Thanks @brhellman!
- Fixed a composer crash when a list item has no list around it. (#2813)
- Sending a draft now retries the draft lookup once before reporting "draft not found". (#2848)
- On Wayland, Mailspring now restores the saved window size. (#2961) Thanks @shanelord01!
- An empty key list in
keymap.jsonnow unbinds a command. (#2950) Thanks @brhellman!
Localization:
Developer:
- Account-test errors from the sync engine are now reported to Sentry as separate issues. (#2843)
1.26.0
1.26.0 (10/1/2026)
This is a major sync reliability release - The sync engine now tracks every folder a message lives in, rather than forcing each message into a single folder. This permanently fixes mail "flickering" between folders or disappearing from the Inbox when the same message exists in two places — a long-standing issue for iCloud users, self-addressed mail that lands in both Inbox and Sent, Exchange's duplicate Sent copies, and ProtonMail labels. (#2891) This refactor was enabled by a huge new suite of automated mailsync tests that run against real Dovecot, Cyrus in Docker and fake problematic IMAP servers.
Features:
- Folder and unread counts left wrong by previous versions are repaired automatically on upgrade. Thanks @dansleboby!
- Calendars now refresh every 15 minutes instead of every 45, so invitations accepted on another device or meetings moved by the organizer show up sooner. Contacts sync slightly less often to conserve Google API quota. Thanks @brhellman!
- After an event is saved or deleted, Mailspring re-reads the calendar from the server so the event reflects what the server actually stored. (#2915) Thanks @brhellman!
- Calendars deleted or unshared on the server are now removed from Mailspring along with their events. Thanks @brhellman!
- Mailspring now records whether each calendar is your own or shared with you, so RSVPs are never written onto someone else's calendar. (#2916) Thanks @brhellman!
- Day and week calendar views now draw events with the same chip style as the month view, and selected events fill with the calendar's own color. (#2895) Thanks @manilabui!
Security:
- Links in print preview, quick-preview and "show original" windows now open in your browser instead of loading the remote page in the window.
- Links from auxiliary windows only open in your browser after a real click or keypress, so a meta refresh in a message can no longer open a page on its own.
- "Show All" on a clipped message now sanitizes the message body and blocks remote images like the reading pane.
- Replying, forwarding and sending no longer fetch remote images referenced by the message when automatic image loading is off. Opening an event's notes no longer fetches images referenced by its description, which could tell the sender you opened the invitation. (#2901) Thanks @brhellman!
- A malicious event UID can no longer cause the sync engine to write outside the calendar collection on the CalDAV server. Thanks @brhellman!
Bug Fixes:
- Fixed duplicate Sent copies appearing on Exchange Online, Gmail, Yahoo and Zoho, which file their own copy of sent mail.
- On servers without IMAP MOVE, moving a message no longer permanently erases other messages another client had only marked for deletion (e.g. Outlook's "mark for deletion" mode).
- Fixed several provider quirks: folder roles detected by name and
\Archivesupport, servers reporting UIDNEXT 0, Coremail/NetEase servers that require an ID command, and servers that refuse LIST being treated as missing folders. - Fixed mail rules not applying to self-addressed messages whose Inbox copy arrived after the Sent copy.
- Fixed the Unread view's recently-read threads leaking across views. (#2905) Thanks @dansleboby!
- Fixed Gmail messages losing text the sender placed inside the signature block when there was no quoted text. (#2902) Thanks @dansleboby!
- On Linux, fixed two title bars appearing on KDE and GNOME for users who never chose a menubar style. (#2903) Thanks @dansleboby!
- Fixed blank lines appearing in the inline reply composer. (#2896) Thanks @arnonuem!
- Fixed adding some Google Workspace and Office 365 accounts by always using the provider's servers for OAuth accounts. (#2907) Thanks @Jorl17!
- Fixed the Send button silently doing nothing when a draft's From address matches no account or alias; Mailspring now explains the problem. (#2910)
- Carriage returns are stripped from text dropped into the composer. (#2908)
- Fixed Google contacts with a birthday but no date failing to open in the contact editor. (#2912)
- Fixed an error when a sound effect can't be decoded. (#2911)
- Malformed URLs passed to Mailspring on launch are now ignored. (#2913)
- On macOS 27, notifications now respect the system "Play sound for notifications" setting and Focus modes, and the notification sound plays correctly.
- On macOS, fixed the window not being draggable beneath the window controls.
- Updated Electron to 44.5.1 to fix webview detach errors. (#2909)
- Mailspring now tells you when the server rejects an event save instead of leaving the unsaved edit on screen. (#2914) Thanks @brhellman!
- Fixed RSVPs to recurring events including other guests' attendance in the replies for moved or modified occurrences. (#2917) Thanks @brhellman!
- Fixed recurring events created in winter showing an hour off in summer: VTIMEZONEs now carry the zone's daylight saving rules, including every offset change. (#2885, #2900) Thanks @brhellman!
- Fixed Outlook and Exchange events using Windows zone names ("Central Standard Time") being shifted to your machine's time zone when edited. (#2897) Thanks @brhellman!
- Fixed an invitation that redefines the UTC zone shifting every UTC time for the rest of the session. (#2898) Thanks @brhellman!
- Fixed UTC timestamps in calendar data being read as local time. Thanks @brhellman!
- Fixed deleting a single occurrence of a recurring event deleting the entire series on the server. Thanks @brhellman!
- Fixed accepting an invitation already present on the calendar failing as a duplicate create. Thanks @brhellman!
- Fixed every calendar being marked read-only on servers that omit or aggregate privilege information. Thanks @brhellman!
- Fixed Fastmail/Cyrus scheduling Inbox and Outbox collections appearing as calendars, and DAV principal discovery on some servers. Thanks @brhellman!
- Fixed RSVP emails violating MIME line-length and encoding rules, which some mail servers refuse. Mailspring also accepts iTIP COUNTER proposals when responding. Thanks @brhellman!
- Fixed a failing manual calendar refresh aborting the sync process. Thanks @brhellman!
- Fixed CalDAV and CardDAV discovery on servers that use 303, 307 or 308 redirects from
/.well-known. Thanks @Alintya! - Fixed a blur on a calendar time field moving the event to today, a timed event losing its time when its day is changed, and a bare hour like "3" always being read as PM. (#2890, #2892, #2893) Thanks @manilabui!
- Fixed all-day event saves writing the wrong date span. (#2894) Thanks @manilabui!
- Fixed event notes missing when the description begins with
itemprop=descriptionmeta tags.
Improvements:
- The offline indicator is a less aggressive gray, and coming back online re-syncs your accounts immediately, clearing the indicator.
Developer:
- Added an extensive fakeimap, Cyrus and Dovecot test suite for the sync engine.
- Updated out of date GitHub Actions versions.
- Fixed Playwright assertions for the macOS 27 navigation bar.
1.25.0
1.25.0 (9/19/2026)
Features:
- The Activity panel has been redesigned around three tabs: a new Feed tab lists every open and click with search, filtering, grouping by recipient or message, collapsing of repeated events and CSV export; a new Engagement tab ranks your recipients by how much they open and click your mail; and Reports has a new design with more charts.
- Added a "Go to Unread" navigation command (
g uin the Gmail shortcut set), listed under View in the menu bar and rebindable from Preferences > Shortcuts. - On macOS, the base theme now matches the macOS 27 toolbar and window styling.
Security:
This version includes several patches for security vulnerabilities and is recommended for all users. Thanks 홍서연 at ENKI WhiteHat for detailed investigation and reporting.
Bug Fixes:
- Fixed initial sync silently dropping messages on servers that advertise CONDSTORE and QRESYNC (FastMail, Dovecot, Zoho and others). Only the first 1024 messages of each 5000-message chunk were ingested.
- Fixed QRESYNC VANISHED handling that could unlink an entire folder's messages or drop expunges permanently on CONDSTORE+QRESYNC servers.
- Fixed a crash loop when an IMAP server or gateway (DavMail, Proton Bridge, Zoho) lists the same mailbox twice.
- Fixed Inbox and Sent appearing empty, with messages flickering between folders, on non-Gmail accounts that expose an
\Allmailbox. Messages that exist in both Inbox and Sent now consistently resolve to one folder. - Fixed SMTP connections failing on servers that enforce RFC 5321's requirement that EHLO/HELO carry a fully qualified domain name or address literal.
- Fixed a sync-engine crash on launch when two accounts started contact sync in the same second and generated identical contact IDs. Random IDs are now seeded from the OS entropy source.
- Fixed malformed OAuth token responses crashing the sync engine, and a task with a null JSON field wedging it.
- Fixed Proton accounts losing their container folder, which placed Mailspring's helper folders (Snoozed) in the wrong place.
proton.meaddresses are now recognized, and Thunderbird autoconfig no longer overrides Mailspring's provider settings. (#2886) - Fixed adding a Gmail or Office 365 account while offline reporting "Unable to connect to the server / port you provided" instead of an offline error. (#2887)
- Fixed the print window rendering inverted when the dark email render mode is enabled.
- Fixed deleting a single moved occurrence of a recurring event deleting the entire series from the server. (#2866) Thanks @brhellman!
- Fixed editing any field of a recurring event resetting its recurrence rule, so a fortnightly meeting became weekly and RDATE-only series lost their dates. (#2868) Thanks @brhellman!
- Fixed moving a recurring series leaving its EXDATEs behind, so every cancelled occurrence came back on every guest's calendar. (#2867) Thanks @brhellman!
- Fixed events with an IANA TZID whose VTIMEZONE the CalDAV server omitted (RFC 7809) reading as floating local time. (#2877) Thanks @brhellman!
- Calendar edits now write DTSTAMP in UTC as required by RFC 5545. (#2873) Thanks @brhellman!
- Fixed the calendar toolbar overlapping the date below ~800px wide, and day headings drifting from their columns. (#2870) Thanks @brhellman!
- The event card and editor now scroll when they outgrow the window, so Save and Cancel are always reachable. (#2874, #2878) Thanks @brhellman!
- Fixed a focused calendar event reopening its card and scrolling the grid on every re-render and view switch. (#2872) Thanks @brhellman! (#2882) Thanks @manilabui!
- Fixed the time tooltip never appearing while dragging a calendar event. (#2871) Thanks @brhellman!
- Fixed an invitation's date rendering in the same red as the conflict warning; the location is now a clickable link. (#2869) Thanks @brhellman!
Improvements:
- Knowledge base links throughout the app now point to the new documentation URLs.
Developer:
- The Windows build now fails if any shipped PE binary lacks a certificate table, and surfaces signtool's error when installer signing fails. (#2884)
- Certificate failures in the sync engine are logged through MCLog instead of a stderr BIO.
- Updated CONTRIBUTING.md with the current Node version and instructions for downloading mailsync.
1.24.1
On Linux, Mailspring 1.24.1 fixed accounts being lost after upgrading when the KWallet secret name changed. Mailspring now falls back to the previous secret storage key and re-saves credentials. (#2864) Thanks @LinusDierheimer!
Features:
- Added "Mark All as Read" to the folder context menu, and an option to show unread counts for all folders. Thanks @AnsCodeLab!
- New drafts in a unified inbox now default to the account of the focused thread. Thanks @AnsCodeLab!
- Added a
MessageActionMenuItemextension point so plugins can add items to the message "..." menu. Thanks @AnsCodeLab!
Bug Fixes:
- Fixed mail rules breaking when a folder's ID changed right after it was created. Rules now match folders by name when the match is unambiguous.
- Fixed the sidebar not switching from "Drafts" to "Activity" and other perspectives with the same layout.
- Fixed reminders created in the draft UI missing the last reply timestamp, so they never fired.
- Uploading a new signature image no longer overwrites the previous image on Mailspring's servers. Previously, replacing a signature image changed the image in emails you had already sent, and teams sharing a Mailspring ID could overwrite each other's default signature images.
- On Windows, composer and thread popout windows no longer show a second title bar beneath the native one; press Alt in those windows to show the menu bar. Thanks @ejbiker93ss!
- On Windows, the system tray icon is no longer blurry at 125% / 150% and other fractional display scales. Tray icons now ship as multi-size .ico files so Windows can pick an exact-match frame instead of stretching the 16px image.
- Fixed popout windows sometimes opening with the wrong toolbar when a hot window is assigned a window type. Thanks @ejbiker93ss!
- Fixed link and open tracking being lost when moving a draft between accounts.
- When attaching multiple files to a draft, the file order is now preserved.
- Pasting from Excel or OpenOffice now prefers the HTML clipboard content, and pasting several files at once attaches all of them, not just the first.
- Pasted JPEG, GIF, BMP, and WebP clipboard images are now recognized so they stay inline in the composer. Thanks @AnsCodeLab!
- Fixed some hardcoded colors in package stylesheets that did not follow the active theme.
Improvements:
- Emails with an explicit black text color (common in iCloud and Apple Mail signatures) are now shown white on dark background in dark mode, instead of a bright white background. (#2850)
- The folder context menu is now grouped with separators.
- On Windows, keyboard shortcuts are now shown with Ctrl / Alt / Shift instead of
modin the preferences.
Developer:
- The Claude Desktop MCP integration now uses a stdio bridge built into Mailspring instead of relying on
npx. --spec-directorynow resolves relative paths and fails fast when the directory does not exist.
1.24.0
1.24.0 (9/12/2026)
Note: The Flatpak version of Mailspring now uses Portal for secret storage, and you may be prompted to re-authenticate accounts after upgrading.
Note: Mailspring now requires macOS 13 (Ventura) or later, because Chromium has dropped support for macOS 12. Windows and Linux system requirements are unchanged.
Features:
- Added support for dragging threads into the composer to attach them as .eml files. (#2800)
- Added subject line support to email templates. (#2794)
- In the calendar, dragging an event now converts between all-day and timed. (#2819, #2812) Thanks @manilabui!
- Added an MCP
get_attachmenttool so local agents can view mail attachments. (#2807) Thanks @ahmedwalid05! - On Windows, Mailspring now recovers from GPU-related renderer crashes that happen before the window loads by relaunching with hardware acceleration disabled. Thanks @ejbiker93ss!
Bug Fixes:
- Mailspring now falls back to legacy TLS settings when the handshake is rejected, and surfaces a suggestion when it does. (#119)
- Fixed crash safety, XML escaping, and log hygiene issues in the sync engine. (#122) Thanks @brhellman!
- Fixed synchronization with NetEase IMAP servers. (#121) Thanks @aixia715!
- Fixed recurring meetings whose series started years ago not appearing in the calendar. (#2845) Thanks @brhellman!
- On Linux, EROFS, EIO, ENOSPC, and EBADF are now swallowed alongside EPIPE in the stdout/stderr error handler. (#2789)
- Plain text messages are no longer inverted in dark mode, causing black-on-dark-gray text.
- Messages with stylesheets in the HTML
<head>region now render with the styles intact.- Fixed a crash in the thread list context menu for threads with no participants. (#2839) - Fixed a composer crash when removing a link mark with no active mark present. (#2802)
- Fixed a composer crash when applying a signature to an empty document. (#2804)
- Fixed a composer crash when backspacing near an unpaired UTF-16 surrogate. (#2808)
- Fixed a composer crash from an unset Slate selection point. (#2787)
- Fixed a crash when the custom-fonts plugin activated during boot. (#2785)
- Fixed a
ChangeLabelsTaskassertion failure when removing search results. (#2816) - Fixed a
TaskQueuecrash when queries loaded out of order. (#2786) - Fixed an uncaught "Unknown button clicked" crash in the config load-error dialog. (#2798)
- Fixed all-day events losing or gaining a day across edit, drag, and recurring paths, including near DST transitions. (#2799, #2805, #2806, #2810) Thanks @manilabui!
- Fixed resizing recurring events when applying the change to all events. (#2814) Thanks @manilabui!
- Fixed calendar deletion and blocked edits on read-only calendars and past events. (#2797) Thanks @manilabui!
- Fixed pasted text colors and line spacing on Windows. (#2796) Thanks @Mylosis!
- Fixed scrollbars appearing in the inbox-zero animation. (#2821) Thanks @m-salman-afzal!
- Fixed timed calendar events at midnight and across DST day boundaries rendering in the wrong day column or not at all. (#2847) Thanks @manilabui!
- Fixed timed calendar events sitting off their gridlines on DST days. (#2852) Thanks @manilabui!
- Fixed a timed event losing its time of day when its edge was dragged in month view. (#2858) Thanks @brhellman!
- Fixed the calendar view jumping when an event was selected for the first time. (#2854) Thanks @brhellman!
- Fixed the day/week calendar grid not scrolling to the end of the day in short windows. (#2851) Thanks @manilabui!
- Fixed every calendar invitee being underlined as a malformed address. (#2844) Thanks @brhellman!
- Fixed "Refresh Calendars" not actually syncing calendars. (#2853) Thanks @manilabui!
- Fixed a TypeError when creating or editing calendar events with an organizer or attendees. Thanks @ejbiker93ss!
- The calendar now syncs immediately after you RSVP to an invitation. Thanks @ejbiker93ss!
- Fixed the mini month view's today marker not advancing past midnight. Thanks @ejbiker93ss!
- Fixed Outlook-style read/unread keyboard shortcuts on Windows. (#2849) Thanks @ejbiker93ss!
- Fixed "Reset Theme" after a theme compile error not recovering when the failing theme was set as the light or dark theme. Thanks @ejbiker93ss!
- Fixed contact email addresses with surrounding whitespace failing validation or being sent as malformed recipients. Thanks @ejbiker93ss!
- Mailsync startup failures now report the actual reason instead of "an unknown error has occurred". (#2827) Thanks @brhellman!
- On macOS, Quick Look thumbnail generation now times out so hung
qlmanageprocesses can't accumulate. (#2862) Thanks @nitay! - Fixed an unhandled promise rejection when opening identity links while signed out. (#2861)
- Fixed the system tray icon not appearing on Linux when Mailspring launched before the desktop's tray host was ready, and when running in the Snap or Flatpak sandbox. (#2863, #2825)
- Files copied from Finder, Explorer, or a Linux file manager and pasted into the composer now attach under their original filename instead of "Pasted File".
Improvements:
- Selected calendar events now stay selected and scroll into view when switching views. (#2815) Thanks @manilabui!
- You can now drag across past events in the calendar to create a new event. (#2809) Thanks @manilabui!
- HTML signatures can now be pasted into the "Raw Signature" box.
- On Linux, autostart now uses XDG Desktop Portals when running inside Flatpak. (#2838) Thanks @LinusDierheimer!
- The key manager now uses the async
safeStorageAPI. (#2823) Thanks @LinusDierheimer! - Removed the legacy dark-theme email inversion; the "Match app theme" email render mode is gone and email bodies now default to light mode. (#2850) Thanks @ejbiker93ss!
Localization:
- Added Swedish desktop and integration labels. (#2837) Thanks @yeager!
- Updated the Czech translations. (#2855) Thanks @tomo90!
- Completed the missing Traditional Chinese strings. (#2790) Thanks @nrps9909!
- Updated the Hebrew translations and added Hebrew to the list of human-verified languages. (#2801) Thanks @omeritzics!
- Updated translations of new strings and made minor corrections. (#2784) Thanks @Impostor0729!
Developer:
- Updated Electron from 41.7.2 to 44.3.0 (Chromium 152, Node.js 24.20). (#2818, #2825) Thanks @wrench-exile-legacy and @LinusDierheimer!
- Migrated to Electron 44's promise-based
clipboardAPI; the module is no longer available in renderer processes. - Added Playwright coverage for composer paste (text, HTML, images, and copied files) and clipboard writes;
window.evalis enabled under the Playwright harness sopage.evaluateworks. - Upgraded
tarto 7.5.19 to address CVE-2026-59873. (#2811) Thanks @anupamme! - Switched
app/package.jsonfromresolutionstooverrides. (#2822) Thanks @LinusDierheimer! - Fixed the three type errors that were keeping CI red. (#2829) Thanks @brhellman!
reportError()now captures a real stack for stackless inputs. (#2828)- Errors thrown by community plugins are no longer reported to Sentry. (#2783)
- Uncaught
shell.openExternalrejections now capture the caller stack. (#2788) ContextifyScriptcompile errors with no first-party frames are no longer reported to Sentry. (#2859)- On Linux, newer versions of sqlite3 are now built with clang-15.
- Added a Claude Code hook that lints edited TypeScript files.
1.23.0
1.23.0 (7/19/2026)
Features:
- Added Office 365 shared mailbox support. (#2763) Thanks @Kevin-Hamilton!
- Added the ability to export folders to mbox files. (#2765) Thanks @Kevin-Hamilton!
- Added an option to count unread messages across all accounts. (#2779) Thanks @WebDevBar!
- Added a toggle for email render mode. (#2737) Thanks @AidanWarner97!
- Added an MCP server (off by default) that lets local agents interact with mail.
- On Linux, added a taskbar unread badge for KDE and other non-Unity desktops. (#2756) Thanks @WebDevBar!
Bug Fixes:
- Fixed a composer crash on quoted emails with inline images. (#2776)
- Fixed a composer crash when grammar-check decorations apply mid-composition. (#2775)
- Fixed missing Slate attributes on the IMAGE_TYPE fallback node. (#2774)
- Fixed a composer cut crash and suppressed Sentry noise from third-party plugins. (#2755)
- Fixed a crash when dragging threads to the sidebar after a thread is deleted. (#2760)
- Fixed a crash in
EventRSVPTaskwhen attendee ICS data goes stale. (#2770) - Fixed a crash in the translation plugin when the iframe
contentDocumentis not yet loaded. (#2752) - Fixed an onboarding crash when back-navigation empties the page stack. (#2750)
- Fixed
navigator.clipboard.writeTextin@electron/remoteMenuItem handlers. (#2754) - Fixed an
ERR_FILE_NOT_FOUNDcrash in Show Original when the RFC822 fetch fails. (#2772) - Fixed null crashes in
SendDraftTask, thread-sharing, and send-and-archive. (#2757) - Fixed a null crash in three IPC handlers when
BrowserWindow.fromWebContents()returns null. (#2758) - Fixed cancellation of
GetManyRFC2822Task(folder export). (#118) Thanks @Kevin-Hamilton! - Fixed handling of XDG paths. (#2761) Thanks @LinusDierheimer!
- On Linux, fixed an EPIPE crash loop in the uncaughtException handler. (#2769)
- On Linux, send
org.freedesktop.DBus.Hellobefore emitting the badge signal. (#2778) Thanks @WebDevBar! - Stopped startup after a fatal
config.jsonload failure. (#2764) - Guarded
nativeThemeremote object access inSystemTrayIconStore. (#2753) - Guarded grammar check so it no longer emits warnings when logged out.
Improvements:
- Added a macOS 27 icon variant.
- Reduced Sentry noise: expected IMAP/SMTP auth and connection failures are no longer reported. (#2762)
- Reduced Sentry noise from OAuth SSL failures and improved the mailsync crash message. (#2771)
- Downgraded the unknown-feature warning from an error report to a console warning. (#2759)
- Wrapped unhandled fetch errors in
APIErrorinmakeRequest. (#2766) - Fixed an uncaught 'error' event crash in
MailsyncProcess.sync(). (#2773) - Fixed an unhandled rejection in
IdentityStorebackground polling. (#2768)
Developer:
- Upgraded
@electron/packagerto prevent build hangs on newer Node.js versions. (#2767) Thanks @wrench-exile-legacy! - Get the desktop name dynamically from
package.jsonand stop hardcodingMailspring.desktop. (#2748, #2777) Thanks @LinusDierheimer! - Use a template var as the icon value in
Mailspring.desktop. (#2747) Thanks @LinusDierheimer! - Added branding colors to
appdata.xml. (#2751) Thanks @LinusDierheimer! - Fall back to ad-hoc signing in the copy-to-app build phase. (#117) Thanks @Kevin-Hamilton!
1.22.0
Features:
- Added the ability to choose which themes apply in automatic light/dark mode. (#2732) Thanks @Jayphen!
Bug Fixes:
- Fixed null crash when clicking "Send now" on undo-send toast after the message had already been sent. (#2738)
- Fixed two null-access crashes reported in Sentry (MAILSPRING-CLIENT-1G, MAILSPRING-CLIENT-18, MAILSPRING-CLIENT-2V). (#2740)
- Fixed two Sentry crashes: null account in preferences and null window in app menu IPC. (#2741)
- Fixed crash when archiving from search with label-based archive categories. (#2743)
- Fixed null crash when removing threads with unsynced trash/archive category. (#2736)
- Fixed Outlook account setup. (#2735) Thanks @Suchiman!
- Fixed Windows print crash caused by invalid file URL. (#2733)
- Fixed TOCTOU null-reference crash in draft body setter (MAILSPRING-CLIENT-S). (#2728)
- Fixed
DefaultClientHelperMacpassing boolean to error callback, causing false Sentry reports. (#2731) - Fixed
AttributeDateTime.fromJSONtreating 0/falsy values as missing. (#2730) - Fixed quickpreview CSP clobbering the default session's app-wide CSP. (#2744) Thanks @dansleboby!
- Fixed
QuerySubscription._fetchRangecontiguity check using actual result length. (#2734) - On Windows, fixed EPERM crash when forking background query agent. (#2745)
Improvements:
- Improved Microsoft OAuth: better email resolution and suppressed no-mailbox errors from Sentry. (#2746)
- Added diagnostics around "draft not found" error on send and cleaned up waiting queues. (#2727)
- Moved payment flow out of modal to launch on the web for newer Stripe integration.
- Richer exceptions when account has no from address or when label is provided to ChangeFolderTask.
- Draft reminders now use
thread:metadata prefix so sync engine promotes them to thread on send. (#2729) - Sync engine now forwards identity-level refresh events from delta stream. (mailsync#115)
1.21.1
Performance:
- Optimized search regex compilation in category and label pickers. (#2715)
- Improved sync engine performance by reducing unnecessary SQLite writes and moving parsing outside transactions.
Bug Fixes:
- Improved theme support in calendar
- Fixed dark mode email bodies not reflecting the system tint color.
- Fixed
activeMarksaccess errors in the composer editor. (#2714) - Fixed thread list scroll indicator not sliding through time when dragging the scroll handle. (#2716)
- Fixed
containserror when parentFilter receives a non-Element node. (#2712) - Fixed secrets potentially appearing in the connection error detail modal. (#2717)
- Fixed package name validation rejecting names with uppercase letters. (#2718)
- Fixed sync engine crash during many-account sync by increasing SQLite busy timeout.
- Fixed message importance headers not normalized for compatibility with some providers. (mailsync#113)
- Improved error logging for empty or malformed error objects. (#2713)
Developer:
- Upgraded Electron from 41.5.0 to 41.6.1.
- Upgraded React and React DOM to v17. (#2725)
- Upgraded react-transition-group from 1.2 to 4.4.5.
- Replaced deprecated
componentWillMountwithcomponentDidMount. (#2724) - Replaced legacy context API with React Context. (#2722, #2723)
- Refactored class components to functional components with React.memo. (#2720)
- Removed PropTypes, replaced with TypeScript types. (#2710)
- Added missing TypeScript types to function declarations across many files.
- Renamed remaining package spec directories to
specs, converted JSX to TSX. (#2711) - Added Playwright tests for composer interactions.
- Fixed lint CI step that was performing fixes instead of validation. (#2719)
- Removed unused CircleCI configuration.
- Set C++ standard to C++17 across all platforms. (mailsync#114)
- Various CMake and build improvements for mailsync. (mailsync#108, mailsync#109, mailsync#110, mailsync#111, mailsync#112) Thanks @LinusDierheimer!
1.21.0
Features:
-
Added Reply-To field to the composer header, allowing you to specify a different reply address when composing messages. (#2691) Thanks @Argjend12345!
-
Added bulk RFC2822 message export functionality to the sync engine. (#107)
Bug Fixes:
-
Fixed HTTP/2 framing errors that could crash the sync engine during metadata streaming. (#103)
-
Prevented global keyboard shortcuts from firing when focus is in the composer. (#2693)
-
Strictly validate accent color hex values from system preferences to prevent errors. (#2692)
Claude Security Audit:
-
Tightened validation to prevent file:// URIs in email content. (#2699)
-
Limited path traversal in protocol handler. (#2700)
-
Added allowlist validation for IPC window and webcontents methods. (#2701)
-
Improved HTML sanitization in the composer when pasting content. (#2702)
-
mailto links no longer support the ?attach= query parameter. (#2703)
-
Improved attachment name sanitization for security and compatibility. (#2705)
-
Improved email sanitization to block CSS @import tracking vectors. (#2706)
-
Added package name validation to prevent path traversal attacks. (#2698)
-
Added URL validation to the autoupdate handler. (#2697)
-
Show a notice about plugin trust when installing third-party plugins.
Improvements:
-
When a detailed error log is available during OAuth sign-in, it is now displayed to help with troubleshooting.
-
Used
execin mailsync wrapper script for direct signal delivery. (#105)
Developer:
-
Migrated build system from Grunt to a standalone Node.js script. (#2704)
-
Added option to skip installer creation in the build script. (#2707) Thanks @LinusDierheimer!
-
Dropped .map files from distribution packages. (#2686) Thanks @ReillyBrogan!
-
Replaced long-deprecated Raven with native Sentry envelope implementation and send sourcemaps during build. (#2694)
-
Upgraded TypeScript target from es2017 to es2024.
-
Refactored TypeScript compilation cache and only enable in dev mode. (#2695)
-
Removed macOS Touch Bar support. (#2696)
-
Updated ESLint and Prettier, and reference local versions in VS Code settings.
-
Added missing TypeScript types to function declarations across many files.
-
Upgraded Electron 41.2.1 to Electron 41.5.0.
-
Added Playwright tests for pre-release verification.
-
Added tests covering VCF/EML business logic and other utilities.