Commit Graph
800 Commits
Author SHA1 Message Date
Linus Rath cf0eb03c4a feat: show the sender's BIMI logo as the sender icon when the message passes DMARC
Stalwart does no BIMI, so sender icons were only ever favicons, which
anyone controls for any domain. The webmail server now does the
receiver side itself at /api/bimi, and avatars ask it only for
messages whose own Authentication-Results say dmarc=pass for the exact
From domain.

- `lib/bimi/`: DMARC policy check (quarantine or reject, pct=100, the
  parent domain's sp and p for subdomains), the assertion record with
  fallback to the parent domain, mark certificate validation (chain to
  pinned DigiCert, GlobalSign and SSL.com VMC roots, BIMI key purpose,
  validity, SAN, SCTs present, CRL revocation, logo from the logotype
  extension), SVG Tiny PS checks and rendering to PNG, caching
- logos backed only by the DNS record show by default; the admin
  setting "Require a mark certificate" (`BIMI_REQUIRE_CERTIFICATE`)
  limits them to VMC and CMC backed ones
- a check mark beside the sender's name for certificate-backed logos
- avatars try contact photo, BIMI logo, plugin avatar, favicon; the
  sender warning shield still wins, and logos follow the sender icons
  setting and the no-third-party-traffic mode
- the two-label public suffix list moved to `lib/root-domain.ts`

SCT signatures are not verified and only the default selector is used.
2026-10-30 00:12:24 +01:00
Linus Rath 357b6af3c9 feat: offer to remove a cancelled meeting from the calendar in the cancellation mail #1425 2026-10-29 20:24:27 +01:00
Linus Rath be423637fc feat: show one column and an optional paged message list in simple mode 2026-10-29 19:14:41 +01:00
Linus Rath 8e201954b4 fix: make the message list one Tab stop that screen readers read row by row
The list was a stack of clickable divs. Screen readers heard nothing when
j or k moved the selection, every row added several Tab stops (Compose
sat 253 Tabs from the top), and a deleted message left the focus on the
page.

The list is now a treegrid named "Messages": one Tab stop, rows named in
one sentence (unread, sender, subject, date, flags, and the preview when
that setting is on), conversations with aria-expanded and their
messages a level down, position and list size on every row. j, k and the
arrows move the focus with the selection, Space ticks a row, Enter opens
it, Shift+F10 or the menu key opens its actions, and after a delete the
focus lands on the next row. With the actions button setting on, each
row shows a button for the same menu, for pointers that can't hover or
right-click.
2026-10-29 18:53:05 +01:00
Linus Rath 315e292706 feat: show the accessibility and help links on the login page, in the settings sidebar and in the account menu 2026-10-29 18:28:06 +01:00
Linus Rath 92189b50cb feat: add plain-language wording for sharing, calendar and S/MIME settings 2026-10-29 18:10:29 +01:00
Linus Rath 9861af6bed feat: add plain-language wording for send, connection and permission errors 2026-10-29 18:10:29 +01:00
Linus Rath 5ffecf6922 feat: add plain-language wording for the Settings pages 2026-10-29 18:10:29 +01:00
Linus Rath 724c45d6e3 feat: add short explanations for technical terms that work with keyboard, touch and screen readers 2026-10-29 18:07:46 +01:00
Linus Rath bb739c7445 feat: use plainer English and German wording for sign-in and error messages when plain language is on 2026-10-29 18:07:44 +01:00
Linus Rath 4e2affe406 fix: name the remaining search boxes, filter fields and settings inputs that only had a placeholder 2026-10-29 18:03:00 +01:00
Linus Rath ef13556a01 fix: give every contact form field a label screen readers read out 2026-10-29 18:02:59 +01:00
Linus Rath 84c487e6c3 fix: give each settings and admin page its own tab title and translate the admin page list 2026-10-29 18:02:58 +01:00
Linus Rath 37a14eca6a fix: name the inbox category tabs in the user's language and tie them to the list 2026-10-29 18:02:57 +01:00
Linus Rath c92bb1dc06 fix: let password managers and screen readers use the sign-in form 2026-10-29 18:02:57 +01:00
Linus Rath caed2d313a feat: open a message in a reader view with the app's font, spacing and colours 2026-10-29 17:53:59 +01:00
Linus Rath af3019ea2b feat: read a message aloud with the browser's voice, highlighting what it reads 2026-10-29 17:53:58 +01:00
Linus Rath bb78697981 feat: pause animated images in mail with a play button 2026-10-29 17:53:57 +01:00
Linus Rath 1e929b0a95 feat: read HTML mail as plain text, by default or per message 2026-10-29 17:53:57 +01:00
Linus Rath b63038a644 fix: name the file on attachment buttons and say whether a conversation message is expanded 2026-10-29 17:53:54 +01:00
Linus Rath c20b9846b9 fix: name each message frame after its subject and give it the mail's language 2026-10-29 17:53:54 +01:00
Linus Rath 19e0acde91 fix: make the mini calendar a grid with arrow keys, full date names and event days in words 2026-10-29 17:53:52 +01:00
Linus Rath 8e55184e1f fix: name pane resize handles, expose their width and keep their arrow keys from the mail shortcuts 2026-10-29 17:53:51 +01:00
Linus Rath 23813be9b9 feat: tell screen readers when a folder or search has loaded and when the connection drops 2026-10-29 17:53:50 +01:00
Linus Rath d713d31af3 feat: announce how much new mail came and flash the tab title slowly with visual alerts 2026-10-29 17:53:49 +01:00
Linus Rath 374ae9c8dc feat: ask before deleting or archiving when the confirm settings are on 2026-10-29 17:53:48 +01:00
Linus Rath ee17c0dbaf feat: undo marking read or unread, stars and tags from the toast or with Ctrl+Z 2026-10-29 17:53:47 +01:00
Linus Rath 4af4404962 feat: undo the last mail actions with Ctrl+Z or z, newest first 2026-10-29 17:53:46 +01:00
Linus Rath be5e2dbc53 feat: hold toasts while focused and jump to the newest with Alt+Shift+N 2026-10-29 17:53:45 +01:00
Linus Rath 420bf8f9a4 feat: offer an accessible example message in the template picker 2026-10-29 17:53:44 +01:00
Linus Rath 53cb49d3ce feat: ask for alt text when an image goes into a message
Pasted and dropped images used to get the file name as alt text, and
there was no way to change it. Now a small dialog asks what the image
shows right after it is inserted, with a "Decorative image" option that
writes alt="". An image already in the text can be described from the
toolbar or from the ALT button on the selected image. The plain-text
part of an HTML mail writes described images as "[Image: ...]" and
leaves decorative ones out.

The formatting toolbar now also re-renders when only the selection
changes, so its pressed states and the image button follow the caret.
2026-10-29 17:53:43 +01:00
Linus Rath 4d91d9b296 feat: ask before sending when confirm before sending is on 2026-10-29 17:53:42 +01:00
Linus Rath 4f35aa13fa fix: show attachment upload progress and failures in words for screen readers 2026-10-29 17:53:41 +01:00
Linus Rath 447a3fa474 fix: make the formatting toolbar one tab stop that says which styles are on 2026-10-29 17:53:41 +01:00
Linus Rath caee90facc fix: name the message body and tie its error to it for screen readers 2026-10-29 17:53:40 +01:00
Linus Rath 0aa751a3a0 feat: move a recipient between To, Cc and Bcc from the chip's menu 2026-10-29 17:53:39 +01:00
Linus Rath ee486077de fix: name the recipient fields and let the keyboard reach and remove chips 2026-10-29 17:53:38 +01:00
Linus Rath 14519269cf feat: reorder tags, filter rules, apps, accounts and Pro tabs without dragging 2026-10-29 17:53:37 +01:00
Linus Rath 7c282f1f40 fix: say which folder is open and how many are unread in the folder lists 2026-10-29 17:53:36 +01:00
Linus Rath dcc504fcfa feat: add landmarks, an h1 per app, skip links and F6 between panes 2026-10-29 17:53:35 +01:00
Linus Rath 13d697ddfb feat: turn off every single-key shortcut when the setting is off 2026-10-29 17:53:34 +01:00
Linus Rath 4586c69e72 feat: open text size, contrast and motion from anywhere with Alt+Shift+A 2026-10-29 17:53:33 +01:00
Linus Rath 8008393e59 feat: add an Accessibility page to Settings
Settings get a page of their own for accessibility, with presets on top
(screen reader, low vision, dyslexia, focus, keyboard and motor, motion
and seizure safe, deaf and hard of hearing) that change several options
at once and can be undone, then the options by topic, and a reset.

Text size used to be a fixed 14/16/18px on the root, which threw away
the size people set in their browser. It is now a percentage of the
browser's size, from 87.5% to 200%. Motion, contrast and transparency
follow the system by default and can be overridden either way; the
old Animations switch becomes Reduce motion. The visual options are
applied before the first paint, so the page no longer flashes at the
wrong size.

- `lib/accessibility-settings.ts`: the new settings, their allowed
  values, and the code that writes them onto `<html>`
- `app/accessibility.css`: bundled fonts (Atkinson Hyperlegible Next,
  Lexend, OpenDyslexic), text spacing, a focus outline that survives
  Windows contrast themes, more-contrast colours on any theme, reduced
  transparency, a large pointer
- admins can preset every new option but lock only shortcuts, send
  confirmation and the notification duration; a lock on text size or
  another reading aid works as a default
- always-light mail and toolbar labels now sync, and imports drop
  values the page doesn't know
- font size and animations move off Appearance, the plain text font
  off Reading; everyday settings such as conversation view and undo
  send show on both their own page and Accessibility
2026-10-29 17:53:32 +01:00
Linus Rath 5eb6deb26c fix: show password and two-factor settings after a password and TOTP sign-in #1432 2026-10-29 15:50:56 +01:00
Linus Rath 2dbe5d0244 fix: show a shared calendar in the color the server gives it #1414 2026-10-29 14:35:22 +01:00
Linus Rath 828d0acc0b feat: offer this morning and this afternoon as schedule times while they are ahead #1390 2026-10-29 14:34:00 +01:00
Linus Rath 47ee263d76 Merge pull request #1419 from HOLOEYE-JZ/feat/plugin-search-results-pending
# Conflicts:
#	components/email/plugin-search-results.tsx
2026-10-29 14:11:34 +01:00
VasilisNtovolos 995262bde2 fix: report partial and failed attachment ZIP downloads 2026-10-29 14:02:24 +02:00
Jacob Zeitz 03876158fe feat(plugins): hold the search results block's place while a plugin still searches
A plugin's results to a search came all at once after its handler answered,
with nothing before: the block then appeared above the message list and
pushed it down, under a pointer about to click a row. onProvideSearchResults
handlers that search elsewhere (a CRM's search by meaning) take seconds.

Each plugin's answer now shows as it comes, and the store keeps the plugins
still asked. One that has not answered after 300 ms gets the block at a fixed
height with placeholder rows under "Searching for more results…"; its
entries then fill that height, so the list moves once, with its own results.
A plugin that answers at once (one not searching for this query) shows
nothing.
2026-10-29 10:25:59 +01:00
Linus Rath 99b6857d90 fix: keep settings tab labels on one line 2026-10-29 00:57:07 +01:00