Linus Rath
1da04c254b
feat: per-domain branding overrides on /api/config, manifest, pwa-icon #332
2026-05-28 20:06:47 +02:00
Linus Rath
8ae5ecba41
feat: policy-controlled push relay URL with optional user lock
2026-05-28 19:45:14 +02:00
31e96d6a46
Feat: Scheduled send and send delay #322
...
* ADD DOC
* Scheduld Send
* add new shortcuts
* fix
* fix
* fix bugs
* rework
* fix draft duplicating
* fix err
* some fixes
* fixes from review
* fixes from review
* fixes from review
* disable password managers for recipients
* fix email store lazy load
* add translations
* fix styling
* fixes
---------
Co-authored-by: Linus Rath <139418639+rathlinus@users.noreply.github.com >
2026-05-28 18:46:49 +02:00
Shuki Vaknin and GitHub
e93dd44111
fix: report real upload progress; XHR with progress events #333
...
The Files page UI sat at 0% throughout an upload because uploadBlob()
uses fetch(), which does not surface upload progress events. The store
set loaded=0 before the call and loaded=file.size after it, so users
saw the progress bar jump from 0% straight to 100% on completion --
and on slow connections (or large files) it appeared frozen.
Switch uploadBlob() to XHR when the caller passes onProgress or an
AbortSignal, so progress events from xhr.upload.onprogress can drive
the UI. Callers that don't pass either keep the fetch path so we
preserve the existing 401-retry behaviour in authenticatedFetch().
Wire the file store to pass both onProgress (updates uploadProgress
in real time) and the existing AbortController's signal (so cancel
now actually aborts the network request, not just the post-upload
createFileNode step).
uploadBlob() is part of IJMAPClient so the signature change is also
applied to the demo client (synthesises 0% then 100%).
2026-05-28 18:20:22 +02:00
Linus Rath
3a8daf8bff
feat: allow drag-and-drop into shared mailboxes
2026-05-25 18:53:54 +02:00
Linus Rath
e2abc8dee9
fix: prefix remaining <img>, favicon, and WebDAV URLs with basePath #319
2026-05-25 16:45:13 +02:00
Linus Rath
534894c38d
feat: locale-aware date format in email list with preset picker #331
2026-05-25 16:17:32 +02:00
Linus Rath
537707d9ed
feat: include group inboxes in unified mailbox view #328
2026-05-23 16:01:22 +02:00
Linus Rath
acc90eb455
feat: add "Move to Trash and mark as read" delete action #323
2026-05-22 19:08:02 +02:00
Linus Rath
63f2169ae7
fix: add OAUTH_ALLOW_PRIVATE_ENDPOINTS for split-DNS setups
2026-05-22 17:22:14 +02:00
Linus Rath
e843ef0ebb
fix: convert recurrenceRules to singular in batch create
2026-05-22 17:00:53 +02:00
Linus Rath
4b463f9691
fix: prefix hand-written URLs with basePath for subpath deployments
2026-05-22 16:38:55 +02:00
Linus Rath
e3f6ae874d
feat: add settings template for multi-email .zip filename
2026-05-22 15:30:15 +02:00
Linus Rath
52f5a5b42c
feat: support importing emails from .zip archives
2026-05-22 15:22:33 +02:00
Linus Rath
3ac14ecf38
feat: add filename transform settings
2026-05-22 14:57:25 +02:00
Linus Rath
0dca019fe5
fix: stop URL-encoding drag-out filenames and preserve Unicode letters
2026-05-22 14:49:17 +02:00
Linus Rath
ca0d6805cf
feat: add Downloads settings tab with template editor for .eml and attachment filenames
2026-05-22 14:46:25 +02:00
Linus Rath
8bcb487442
feat: name dragged/exported .eml files as "date (from-to) subject" with ASCII-only chars
2026-05-22 14:28:36 +02:00
Linus Rath
8810a63262
feat: drag emails out to file explorer as .eml
2026-05-22 14:04:52 +02:00
Linus Rath
d3778e6521
fix: handle malformed event dates in calendar route #316
2026-05-22 14:04:02 +02:00
Linus Rath
ac4a89120d
fix: preserve inline images when replying #163
2026-05-22 12:06:55 +02:00
Linus Rath
1c02970ae1
fix: use canonical INBOX in Sieve filter paths #313
2026-05-22 11:51:25 +02:00
Linus Rath
fc5f6f43d6
feat: expose PWA, app identity, and extension directory keys in JSON config #312
2026-05-21 23:35:58 +02:00
Linus Rath
dbc0eea148
feat: group composer From dropdown by account in Pro shell
2026-05-21 23:07:02 +02:00
Linus Rath
e80412b6fd
feat: show contacts from all logged-in accounts in Pro shell
2026-05-21 22:32:17 +02:00
Linus Rath
7076f1ded8
feat: show calendars from all logged-in accounts in Pro shell
2026-05-21 18:48:55 +02:00
Linus Rath
e6782e61a8
fix: sync plugin slot iframe height with reported content height
2026-05-21 17:59:24 +02:00
Linus Rath
1756f5ac1c
feat: enable search in unified mailbox in pro mode
2026-05-21 17:12:06 +02:00
Linus Rath
628966d3b5
fix: split app into (main)/(sandbox) route groups so plugin iframe hydrates properly
2026-05-20 23:41:49 +02:00
Linus Rath
1c44f59ba1
feat: allow setup wizard over plain HTTP with dismissable warning gate
2026-05-20 19:01:46 +02:00
Linus Rath
d530d9614b
fix: serialize draft autosave with send to stop replies stalling in Drafts #303
2026-05-19 23:33:11 +02:00
Linus Rath
7003020855
fix: prevent duplication of Bulwark rules with literal braces in values
2026-05-18 23:58:21 +02:00
Linus Rath
ecd0467ffa
fix: stop pulling node:dns into client bundle via OAuth discovery
2026-05-18 19:31:38 +02:00
Linus Rath
cf9292262d
feat: pluggable reply/forward quote header #295
2026-05-18 17:53:23 +02:00
Linus Rath
b2d24670ff
fix: scope iCal subscriptions per JMAP account and fix refresh/clear
2026-05-18 16:39:02 +02:00
Linus Rath
fa261fecfd
fix: omit empty cc/bcc from Email/set so server does not emit bare Cc: header #301
2026-05-18 16:36:45 +02:00
Linus Rath
400703154e
fix: ignore plugin-supplied target in ui.openExternalUrl to block host-frame hijack
2026-05-18 16:18:00 +02:00
Linus Rath
3ceada7b8a
fix: tighten HTML sanitization at plain-text email + signature + i18n render sites
2026-05-18 16:07:34 +02:00
Linus Rath
eb0643d887
fix: pin parent origin in iframe-bridge to block cross-frame postMessage
2026-05-18 16:01:29 +02:00
Linus Rath
1fc670138b
fix: update bundleHash to full SHA-256 for integrity verification and migrate legacy hashes
2026-05-18 15:57:52 +02:00
Linus Rath
313a1fcce9
fix: stop persisting S/MIME passphrases in sessionStorage
2026-05-18 15:32:04 +02:00
Linus Rath
7efd8d59bf
fix: escape print-window fields and re-sanitize body to block XSS
2026-05-18 13:24:52 +02:00
Linus Rath
c2eb2c081b
fix: gate admin routes against cross-origin CSRF
2026-05-18 13:21:01 +02:00
Linus Rath
b299a0b602
fix: validate plugin/theme id in marketplace install to block path traversal
2026-05-18 13:03:49 +02:00
Linus Rath
f275fbe2e4
fix: bind stalwart auth context to credential, not cookie-claimed username
2026-05-18 13:00:40 +02:00
Linus Rath
f134766fd1
fix: validate OAuth discovery endpoints against SSRF
2026-05-18 12:53:43 +02:00
Linus Rath
6ebf720688
fix: block script-bearing MIME types from inline attachment preview
2026-05-18 12:47:44 +02:00
Linus Rath
b1eb2b3c9b
fix: correct regex for valid API post path validation
2026-05-18 12:44:54 +02:00
Linus Rath
48aa607b56
feat: lock down plugin runtime in sandbox + signing + approval
2026-05-18 12:44:23 +02:00
Linus Rath
088810bd20
feat: harden plugin sandbox and migrate in-tree plugins
2026-05-18 12:17:54 +02:00