✨ New Features
- Per-Account Sync Scheduling - The sync interval can now be configured per mail account from the frontend (Create/Edit).
- CSV Bulk Import for IMAP Accounts - Import hundreds of IMAP mailboxes at once.
- Configurable Email Deletion Lock - A new
DeletionPolicy:DeletionAllowedsetting controls whether archived emails may be deleted. See documentation here. - Display Names Preservation - Sender and recipient display names (e.g. "Max Mustermann") are now stored alongside email addresses and faithfully restored during IMAP/Graph restore and EML export. Previously, only the bare email addresses were kept.
- Concurrent Sync Jobs - The number of account syncs running in parallel within one poll cycle is now configurable. See documentation here.
⚙️ Improvements
- Import Pages UX Harmonization - Unified visual structure across MBOX, EML, and CSV import pages.
- Sync Jobs Progress/Status Tooltips - The Progress and Status column headers in the Sync Jobs table now show an explanatory tooltip (via a "?" icon) describing how progress is calculated (per completed folders) and what each status code means.
- Removed legacy CSV/JSON export formats - The UI only offered EML/MBox export; the unused CSV/JSON export code paths have been removed for maintainability.
- IMAP Restore now restores Bcc recipients - Previously only From/To/Cc were restored via IMAP; Bcc addresses (with display names) are now included.
🐛 Bug Fixes
- External Email Images Blocked by CSP - The Content-Security-Policy header on the email view iframe blocked all remote (http/https) images unconditionally, ignoring the
View:BlockExternalResourcessetting. - Updates MS Graph Memory Management - Memory grew steadily during M365 syncs because only Gen-0 GCs ran while large bodies/attachments accumulated as uncollected Large Object Heap garbage; per-page GCs are now background Gen-2 collections. Duplicates are now detected before the per-message detail fetch, avoiding needless body downloads in the 12h overlap window.
- MSA Sync Authentication Failure - Personal Microsoft accounts could fail to sync with "Authentication failed" despite successful authorization when the entered email address was a secondary alias of the mailbox. The actually authorized login name is now extracted from the OAuth id_token.
- MSA Account Status on Details Page - Account Details page always showed "Not yet authorized" for MSA accounts because the controller action did not map OAuth fields.
- Mail Accounts Table Overflow - On narrow desktop browser windows the accounts table overflowed its container.