Commit Graph
384 Commits
Author SHA1 Message Date
Linus Rath b78968971c fix: send from the account's identity when the composer has no From address #1377 2026-10-27 23:23:49 +01:00
Linus Rath 0e026cab2e fix: list files on Stalwart 1.0 when the account holds more nodes than one get allows #1385 2026-10-27 23:20:07 +01:00
VasilisNtovolos ac99c68ef3 fix: reconcile confirmed permanent bulk deletions 2026-10-27 14:51:38 +02:00
Linus Rath 071d57253c fix: stop retrying calendars of an account that only shares mail on Stalwart 1.0 2026-10-26 20:48:00 +01:00
Linus Rath 47e3fd81d7 fix: create folders and upload files on Stalwart 1.0 2026-10-26 20:47:59 +01:00
Linus Rath 7677b87c5e Merge pull request #1373 from motofix/fix/1371-download-name-slash 2026-10-26 19:23:56 +01:00
Julien Béti 460343d86d fix: show inline images whose part name is a path #1371 2026-10-26 18:34:57 +01:00
Linus Rath 2e9bb56071 fix: apply a subscribed calendar feed's changes to events it still carries 2026-10-26 15:15:58 +01:00
Linus Rath e314e56661 fix: keep the own and a group's scheduled mail apart when their ids are the same 2026-10-26 12:26:58 +01:00
Linus Rath d355e45b77 fix: stop Send now from dropping a group identity's delayed mail back into Drafts 2026-10-26 12:26:58 +01:00
Linus Rath cf2c27157d Merge branch 'main' into feat/stalwart-1.0
# Conflicts:
#	components/contacts/contacts-app.tsx
#	components/email/__tests__/composer-discard.test.tsx
#	components/email/calendar-invitation-banner.tsx
#	components/email/email-composer.tsx
#	components/mail/mail-app.tsx
#	components/pro/pro-compose-tab-body.tsx
#	components/pro/pro-email-tab-body.tsx
#	components/ui/__tests__/avatar.test.tsx
#	components/ui/avatar.tsx
#	hooks/use-mailbox-drop.ts
#	lib/__tests__/calendar-alerts.test.ts
#	lib/__tests__/jmap-calendar-tasks.test.ts
#	lib/__tests__/jmap-send-threading.test.ts
#	lib/demo/demo-client.ts
#	lib/demo/fixtures/calendars.ts
#	lib/jmap/client-interface.ts
#	lib/jmap/client.ts
#	lib/web-push.ts
#	stores/__tests__/contact-store.test.ts
#	stores/__tests__/email-store-thread-key.test.ts
#	stores/calendar-store.ts
#	stores/contact-store.ts
#	stores/email-store.ts
2026-10-26 10:14:12 +01:00
Linus Rath 89e93e330e fix: send a sub-address of your own address from your account, not a shared catch-all 2026-10-24 17:58:45 +02:00
Linus Rath 6d459674f8 Merge pull request #1109 from hildebrandttk/fix/group-identity-sent-copy
fix: save a group identity's drafts in the group account's Drafts (#1…
2026-10-24 17:55:10 +02:00
Linus Rath ed42c5a92d fix: cancel the original scheduled send before creating its replacement on reschedule #1308 2026-10-21 19:42:56 +02:00
Stefan Hildebrandt 04efcfc1f3 fix: save a group identity's drafts in the group account's Drafts (#1090)
Drafts were always created in the primary account, so a message composed as
a group identity sat in the member's own Drafts while its Sent copy (since the
previous commit) went to the group.

- createDraft takes { accountId, previousDraftAccountId }: the draft goes to
  the account that owns the From identity (resolveSendAccountId, now public
  and briefly caching the identity lists for autosave), and the replaced
  version is destroyed in the account it lives in.
- The composer tracks draftAccountId next to draftId (save, re-resolve of
  attachment blobs, send, discard, stashed state), since draft ids are only
  unique within one account.
- sendEmail destroys the sent draft in options.draftAccountId; discarding
  (inline and Pro tab) deletes it there, through the identity's login.
- Re-opening a draft from a group/shared Drafts folder (or a stamped
  aggregate row) keeps its account.
- resolveSendAccountId is optional on IJMAPClient; without it drafts stay in
  the primary account.
- Tests: client unit tests for draft placement / replacement / send cleanup,
  E2E spec 18 draft cases (autosave + send, discard).
2026-10-19 16:33:27 +02:00
Linus Rath 100da43991 Merge pull request #1247 from lucamzanon/feat/account-archive-passwords
feat: optionally keep mailbox passwords in the account list backup
2026-10-18 14:34:31 +02:00
Linus Rath 1c8e7025e6 Merge pull request #1178 from VasilisNtovolos/fix/mixed-account-bulk-archive
fix: route bulk archive by owning account
2026-10-18 14:33:41 +02:00
Linus Rath 79d8287dfd Merge pull request #1256 from sanitz/fix/task-due-localdatetime
fix(tasks): send an all-day task's due and start as a LocalDateTime
2026-10-18 14:30:08 +02:00
Linus Rath a11a89d689 fix: skip vacation filter rules on shared accounts without sieve #1263 2026-10-18 13:46:47 +02:00
Linus Rath 107d731af7 feat: remove a message from just the open folder when it is in several #615 2026-10-17 19:18:25 +02:00
Linus Rath 1ad1e31781 feat: set message priority in the composer #970 2026-10-17 19:18:23 +02:00
Linus Rath f8ef54dbea fix: enable push notifications when another user shares a folder with you #1050 2026-10-17 19:17:59 +02:00
Linus Rath 964626794b feat: browse the company directory in contacts and the composer #1253 2026-10-16 20:46:27 +02:00
Sebastian SanitzandClaude Opus 5.5 629781ffd4 fix(tasks): send an all-day task's due and start as a LocalDateTime
The task modal and the plugin API send an all-day due as a bare date
("2026-10-14"). A task's due and start are LocalDateTimes (RFC 8984).
Stalwart accepts the bare date and echoes it back over JMAP, but the
stored iCalendar has no DUE, so CalDAV clients (phones, Thunderbird)
show the task without a date. "2026-10-14T00:00:00" with showWithoutTime
is stored as DUE;VALUE=DATE.

createCalendarTask and updateCalendarTask now complete a bare due or
start to midnight. Every write goes through them, so a task saved by an
older client gets a proper due when it moves to another account.

Tests: create, update and the cross-account move against round trips
recorded on Stalwart v0.16.24 (JMAP set, then CalDAV GET of the stored
iCalendar); times and a cleared due stay as they are.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 17:30:39 +02:00
lucamzanon db38ad320e feat: optionally keep mailbox passwords in the account list backup
Part 2 of 3 of the account archive agreed in #1198. When the admin turns on
"Account List Backup: Passwords" (off by default), saving the list offers to
include the passwords of the accounts signed in here with a plain password.
They are encrypted in the browser together with the list. On restore, those
accounts are signed in to in the background, one by one, without leaving the
active account; a refused password leaves the account waiting for a sign-in by
hand, as before. OAuth and TOTP accounts are saved without a password.
2026-10-16 05:46:46 +02:00
Linus Rath 41a0716c50 Merge branch 'main' into feat/stalwart-1.0 2026-10-16 01:41:48 +02:00
Linus Rath 12e46bd718 Merge pull request #1245 from lucletoffe/feat/calendar-share-recipients
feat(calendar): say whom a calendar is shared with
2026-10-15 23:54:40 +02:00
Linus Rath 7eb0835834 fix: check every calendar for events within the server's request limits #1065 2026-10-15 23:54:36 +02:00
Linus Rath 2f06ef45f5 Merge pull request #1065 from sanitz/fix/tasks-only-calendar-detection
fix(calendar): detect tasks-only calendars per-calendar instead of scanning whole account
2026-10-15 23:54:35 +02:00
lucletoffeandClaude Opus 5.5 8cf6783cdb feat(calendar): say whom a calendar is shared with
The sidebar showed the same people icon for any calendar with a share,
labelled "Share calendar", and the settings badge only gave a count, so
there was no way to tell from either who could see the calendar. A share
granted to a service account read like a share with other people.

Both now carry a hint listing the recipients ("Shared with
bot@example.com (Booking robot)"), resolved from the principals the
server lists. Until every recipient is known the hint falls back to the
count. Principals are fetched only when a calendar on screen is shared.

The per-client principal cache of the attendee availability check moves
to lib/jmap/principal-cache.ts so both use it. It no longer keeps an
empty or failed answer: the next caller asks again instead of seeing
no principals for the rest of the session.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 22:19:53 +02:00
Linus Rath 6ef0d97900 fix: count storage quota against softLimit when the server sets one #1242 2026-10-15 14:31:09 +02:00
Linus Rath d693fbc7c2 fix: leave the all mailbox out of the cross views #1241 2026-10-15 14:25:32 +02:00
Linus Rath 24bd1f8e44 fix: only offer contacts, filters, calendars and files for shared accounts that support them #1239 2026-10-15 14:22:54 +02:00
Linus Rath b1360b8588 fix: leave blank signatures out when creating an identity #1240 2026-10-15 14:18:06 +02:00
VasilisNtovolos 69519bf344 fix: respect account permissions when creating Archive 2026-10-15 14:24:44 +03:00
VasilisNtovolos d1350758a4 fix: route bulk archive by owning account 2026-10-15 14:20:25 +03:00
Linus Rath 15c3acd779 perf: open large HTML messages with one request instead of two 2026-10-15 06:05:22 +02:00
Linus Rath db2c0aff3d perf: load conversation sizes with the folder page instead of in a second request 2026-10-15 00:14:57 +02:00
Linus Rath 2d67442a2b perf: list search results without waiting for the highlighted excerpts 2026-10-14 23:51:17 +02:00
mmmeon d35654cadb fix: set the sender's Message-ID on calendar invitations and replies 2026-10-13 16:32:25 +02:00
Linus Rath 4d733aa598 chore: remove unused exports and the dead plugin error boundary 2026-10-13 13:36:51 +02:00
Sebastian Sanitz 8fc1cd39c3 fix(calendar): detect tasks-only calendars per-calendar instead of scanning whole account 2026-10-12 12:17:17 +02:00
Linus Rath c633185cda Merge branch 'main' into feat/stalwart-1.0
# Conflicts:
#	CONTRIBUTING.md
#	LICENSE
#	README.md
#	app/api/calendar-agenda/route.ts
#	app/api/wopi/files/[fileId]/contents/route.ts
#	app/api/wopi/launch/route.ts
#	components/calendar/calendar-app.tsx
#	components/calendar/calendar-day-view.tsx
#	components/calendar/calendar-month-view.tsx
#	components/calendar/calendar-week-view.tsx
#	components/calendar/event-modal.tsx
#	components/contacts/contact-detail.tsx
#	components/email/email-composer.tsx
#	components/email/email-list.tsx
#	components/files/file-browser.tsx
#	components/files/files-app.tsx
#	components/files/folder-tree-sidebar.tsx
#	components/filters/filter-rule-modal.tsx
#	components/mail/mail-app.tsx
#	hooks/use-mailbox-drop.ts
#	integration/run-tests.sh
#	lib/__tests__/calendar-agenda-route.test.ts
#	lib/__tests__/jmap-draft-lifecycle.test.ts
#	lib/__tests__/web-push.test.ts
#	lib/account-state-manager.ts
#	lib/jmap/client-interface.ts
#	lib/jmap/client.ts
#	lib/jmap/types.ts
#	lib/message-list-order.ts
#	lib/sieve/generator.ts
#	lib/sieve/parser.ts
#	lib/telemetry/payload.ts
#	lib/thread-utils.ts
#	lib/unified-mailbox.ts
#	lib/web-push.ts
#	lib/wopi/token.ts
#	locales/ar/common.json
#	locales/ca/common.json
#	locales/cs/common.json
#	locales/da/common.json
#	locales/de/common.json
#	locales/en/common.json
#	locales/es/common.json
#	locales/fa/common.json
#	locales/fr/common.json
#	locales/he/common.json
#	locales/hu/common.json
#	locales/it/common.json
#	locales/ja/common.json
#	locales/ko/common.json
#	locales/lv/common.json
#	locales/mn/common.json
#	locales/nb/common.json
#	locales/nl/common.json
#	locales/pl/common.json
#	locales/pt/common.json
#	locales/ro/common.json
#	locales/ru/common.json
#	locales/sk/common.json
#	locales/tr/common.json
#	locales/uk/common.json
#	locales/zh-TW/common.json
#	locales/zh/common.json
#	scripts/lite/lib.mjs
#	stores/__tests__/calendar-store-synthetic-ids.test.ts
#	stores/__tests__/email-store-shared-folder-keywords.test.ts
#	stores/__tests__/email-store-unified-actions.test.ts
#	stores/__tests__/file-store.test.ts
#	stores/email-store.ts
#	stores/file-store.ts
#	stores/message-list-tabs-store.ts
2026-10-12 08:35:08 +02:00
Linus Rath 37440e02b0 fix: let tasks move into and live in calendars shared with you #1204 2026-10-12 07:36:46 +02:00
Linus Rath 19797b4c65 fix: sort the message list by date sent when that order is picked #1219 2026-10-12 07:22:00 +02:00
Linus Rath 22ffc36ca9 feat: let plugins run a message-list search with a JMAP filter #1024 2026-10-11 19:39:58 +02:00
Linus Rath fa7e29f980 fix: remove the unsent copy from Drafts when a send fails 2026-10-11 19:09:11 +02:00
Linus Rath 7ceec26ef6 fix: deliver signed and encrypted messages to bcc recipients #1206 2026-10-11 17:35:03 +02:00
Linus Rath 8889346371 feat: warn when a message's sender can't be verified 2026-10-07 19:04:15 +02:00
Linus Rath cbfcdf3b69 Merge pull request #1152 from dealerweb/feat/rule-periods-out-of-office
feat: out of office forwarding and recipients, filter rule periods
2026-10-06 23:28:58 +02:00