Commit Graph
465 Commits
Author SHA1 Message Date
Linus Rath a480ddb6d1 Merge branch 'feat/enterprise-pack-e' 2026-11-01 10:52:08 +01:00
Linus Rath 465320dbfb test: say no plugin checks sends in the composer draft-login test
The test's mocked onBeforeEmailSend had no size, so the composer took
it for a listening send check and built the check's message, which
reads the sending login's identities from a client the test mocks
without getIdentities; the send stopped there. The real bus without a
plugin has size 0, which the mock now says too.
2026-11-01 10:51:54 +01:00
Linus Rath 0401352e6e Merge branch 'feat/enterprise-pack-d'
# Conflicts:
#	components/email/thread-conversation-view.tsx
#	lib/admin/outgoing-hosts-registry.ts
2026-11-01 10:48:21 +01:00
Linus Rath 27e4f0cbac test: cover the file type the composer tells upload checks 2026-11-01 10:09:20 +01:00
Linus Rath 0c8d4ad93e fix: hold sends until required send checks have started, and check what really goes out
- The message for send checks is built after waiting for required
  checks that are still starting: a send right after sign-in gave them
  no external recipients and no file types.
- A plugin's forward is held too while a required check is down, also
  with no plugin listening.
- A plugin the admin forces on that hasn't reached this browser yet (a
  new device, a failed plugin sync) counts as starting.
- A check that stopped working says to reload or tell the admin.
- The files that were checked are the ones sent, and recipients a
  plugin adds after the check are checked again.
- A file Bulwark couldn't read is marked unreadable; a text file
  starting with "MZ" is text, Java and Android apps are told from ZIPs.

Changed assertions: runPluginSendCheck takes a builder and reports
guard-loading or guard-failed instead of guard-down; the composer test
of an auto-disabled guard expects the stopped_working text; the sniff
tests give programs a zero byte, as real ones have, and expect
unreadable on a file that can't be read.
2026-11-01 10:02:58 +01:00
Linus Rath fbf85972c5 fix: check links in plain-text mail and the address the browser really opens
Plain-text bodies render in the page, not in the body iframe, so their
links opened without the link check. Plugins now get each link as the
browser parses it (new URL(href).href) and that same string opens, so a
link check can't judge one host while another opens. With no link check
listening, clicks and middle-clicks stay with the browser as before.
2026-11-01 09:51:00 +01:00
Linus Rath b58dc1d66b fix: apply the device policy and retention line of the account whose folder is open, and keep Copy to account from moving mail out of a restricted account 2026-11-01 09:42:19 +01:00
Linus Rath b3369c7e78 feat: send every link click through the link check 2026-11-01 08:31:27 +01:00
Linus Rath c004587158 feat: keep sending blocked while a required send check isn't running 2026-11-01 08:22:32 +01:00
Linus Rath edf619a19d feat: give send-check plugins the authored text, external recipients and attachment types 2026-11-01 08:16:39 +01:00
Linus Rath 923ecce7d2 feat: say how long Trash and Junk keep mail 2026-11-01 08:07:06 +01:00
Linus Rath ebb33619a0 Merge branch 'feat/enterprise-pack-a' 2026-11-01 07:36:59 +01:00
Linus Rath 1bb2a85de4 fix: translate the turned-off link note and tidy the label and phishing texts
The VS-NfD warning test now expects "BSI-approved products", the corrected wording.
2026-11-01 07:14:10 +01:00
Linus Rath f61fd7922c fix: find an invitation's copy in a group or shared account before answering from the banner #634 2026-11-01 07:09:25 +01:00
Linus Rath f0c0bbe0d2 test: cover another account's labels, removing trusted senders under the lock and the address field without timing 2026-11-01 07:08:45 +01:00
Linus Rath 13c57414a2 fix: report phishing per account from every view and keep a reported message's links off everywhere
- Pro tabs stamp a message of another login or a shared account with
  where it came from, so the report and the move use its account.
- A selection across accounts names every address its reports go to,
  and Undo says how many messages came back.
- A message the list doesn't hold runs the plugins' spam hooks too, and
  every open view shows a reported message as reported at once.
- A reported message hides its unsubscribe banner, and links are off in
  its attachment previews.
- Search results and All mail don't offer reporting the user's own sent
  mail; the Mountain View selection bar offers it.
- The focus goes back to the button that opened the menu.
- ARF names the delivered-to address (or leaves it out), says binary for
  bare line breaks and long lines, and refuses a message bigger than the
  server's upload limit before downloading it.

The phishing tests that compared one address now compare the list of
addresses, and the ARF builder test passes the encoding, not a flag.
2026-11-01 07:07:30 +01:00
Linus Rath 3ef16f602e fix: keep a message's label through Undo send and take over labels only from internal senders
A sent message brought back by Undo, Cancel and edit or edit-as-new
reopened with the default label, because only drafts carried the
X-Bulwark-Label marker; it now falls back to the SIO-Label it went out
with. A reply, quick reply or plugin forward takes over the original's
label only when an internal sender set it and never one below the
default, since anyone outside can write the header. The tests written
for the earlier rule (any received label counts) now pass an internal
sender, which is why their originals changed.
2026-11-01 06:48:01 +01:00
Linus Rath 128f61646e fix: hold remote content per account and until scoped locks are known, also in previews and drafts 2026-11-01 06:42:46 +01:00
Linus Rath a9e1b7bf43 fix: answer invitations in a group or shared mailbox as that account again #634
The banner only answered on the user's own copy since 877198a4b, so an
invitation in a group mailbox (or a boss's mailbox a delegate reads)
was imported into the user's own calendar and answered there: no
reply reached the organiser and the user got a duplicate. It now uses
the copy in the message's own account and answers as that account, as
the group without SENT-BY, as the person with SENT-BY naming the user.
The user's own answer bar on a calendar shared with them also finds the
same occurrence of their own copy of a series.
2026-11-01 06:29:13 +01:00
Linus Rath 624f8dd3e1 fix: stop a quoted message's remote images from loading when the composer opens 2026-11-01 05:55:48 +01:00
Linus Rath 9124620540 feat: show the classification label of received mail 2026-11-01 05:35:29 +01:00
Linus Rath 1c7f81bcc6 feat: pick a classification label in the composer and stamp it on sent mail 2026-11-01 05:33:12 +01:00
Linus Rath 877198a4bf feat: answer invitations in a calendar shared with you as its owner #634 2026-11-01 05:05:12 +01:00
Linus Rath 6262e58ef9 feat: offer the ARF report format for phishing reports 2026-11-01 05:02:32 +01:00
Linus Rath 50f95f4463 feat: report a message as phishing and move it to Junk 2026-11-01 04:58:01 +01:00
Linus Rath 84de2395f0 fix: keep trusted senders from loading remote content anywhere while the organisation blocks it 2026-11-01 03:27:49 +01:00
Linus Rath f25b9ea34b fix: keep hidden buttons on attachment cards from catching taps 2026-11-01 00:48:41 +01:00
Linus Rath eb2e3b2baa feat: make the attachment bar the default and retire attachments beside the sender 2026-10-31 23:35:54 +01:00
Linus Rath 417f512765 feat: add preview cards under the message as an attachment position 2026-10-31 23:28:20 +01:00
Linus Rath 77c23a9e56 feat: show attachments as a bar of equal tiles under the message header 2026-10-31 23:20:53 +01:00
Linus Rath 73a7bb7bcd fix: send the headers plugins add to an outgoing message instead of dropping them 2026-10-31 17:40:20 +01:00
Linus Rath f8805b8d52 fix: keep remote content blocked for trusted senders when the organisation locks it to block 2026-10-31 17:32:24 +01:00
Linus Rath 9d529ca98f feat: reply from the address a message was delivered to when to, cc and bcc have no match #1353 2026-10-31 16:55:10 +01:00
Linus Rath e128515156 fix: show the real total of the unified inbox in mountain view instead of the loaded count #1471 2026-10-31 16:31:17 +01:00
Linus Rath e5ed50dc92 Merge pull request #1467 from HOLOEYE-JZ/feat/plugin-hooks-account-and-composer
feat(plugins): star and after-send hooks name the mail's account
2026-10-31 16:25:00 +01:00
Linus Rath 258dc5e54f Merge pull request #1454 from VasilisNtovolos/fix/save-draft-pending-attachments
fix: wait for attachment uploads before saving and closing drafts
2026-10-31 16:24:58 +01:00
Linus Rath 2ceeef3fb9 Merge pull request #1464 from VasilisNtovolos/fix/xhr-upload-inactivity-timeout
fix: time out stalled XHR uploads after inactivity
2026-10-31 16:24:56 +01:00
Linus Rath d381144c99 feat: put reply and reply all at the top of the open message on the phone in mountain view #1475 2026-10-31 16:21:40 +01:00
Linus Rath 8a4d9e36c9 fix: hide the account dot in the unified view with only one account 2026-10-31 15:57:34 +01:00
VasilisNtovolos 2e8a73ffd2 fix: time out stalled XHR uploads after inactivity 2026-10-31 15:16:17 +02:00
Jacob Zeitz d5cd3c6e40 feat(plugins): star and after-send hooks name the mail's account
Message ids repeat across accounts, so a hook payload naming only an
emailId could not tell a plugin which mailbox the message lies in when
it is a shared or group account's.

onBeforeEmailStarToggle and onEmailStarToggle now carry accountId when
the starred message is not in the user's own account, as the
message-row-actions click context does. Every star (the row's button,
the reader's star, the key, the menu) goes through toggleStar, one
message at a time, so one accountId names it; the account is resolved
before the plugins are asked. An own message's payload is unchanged.

onAfterEmailSend now carries accountId, the JMAP account the sent
message lies in (a mail sent from a shared or group identity lies in
that account), so api.email.get finds it. sendEmail returns that account
as emailAccountId, the S/MIME send too. The hook also carries
composerId, the id the sending composer's slots and actions gave
plugins, so a plugin can act on what the user chose in that composer.
2026-10-31 14:15:06 +01:00
Linus Rath 4887ed457c fix: stop list toolbar timers from firing after the toolbar is gone 2026-10-31 02:28:55 +01:00
Linus Rath 8a09ba5734 fix: leave a bounce's delivery report out of list chips and forwards 2026-10-31 01:50:03 +01:00
Linus Rath d4682890ab fix: hide the quick actions on the open message once the pointer leaves it 2026-10-31 01:47:00 +01:00
Linus Rath 5f1d03f19c fix: stop the message list from jumping back while scrolling 2026-10-31 01:38:17 +01:00
Linus Rath 8b29254a61 fix: hide reply on drafts and scheduled messages in mountain view conversations #1404 2026-10-31 01:26:58 +01:00
Pasquale 3b4b6b9e77 feat: add reply all to expanded mountain view message headers #1404 2026-10-31 01:23:22 +01:00
Linus Rath dafdda5347 fix: let search results move into the open folder #1452 2026-10-31 01:16:34 +01:00
VasilisNtovolos b6290f85b1 fix: wait for attachment uploads before saving and closing drafts 2026-10-30 14:28:21 +02:00
Linus Rath 859d368a1c feat: offer add to calendar on booking cards 2026-10-30 05:46:11 +01:00