Add Mailing lists to Administration #362

Closed
opened 2026-09-15 15:47:20 +00:00 by jcoffey-dev · 0 comments
Owner

Third of the five stacked Administration PRs. This one targets feat/admin-groups (#361). The five are meant to merge together, in order.

What it adds: Mailing lists under Directory, after Groups. A list is its own object in Stalwart, x:MailingList, gated by sysMailingListQuery/sysMailingListGet. Same layout as Accounts and Groups: search, pages of 50, a recipient-count column, and a side panel.

Panel

  • Display name, address (when creating), recipients and other addresses, all saved together.
  • Recipients:
    • Paste several at once: a spreadsheet column, a comma-separated line, or Name <address>. The name words are ignored.
    • Anything with an @ that isn't an address stays in the box with a warning, so it can be fixed.
    • A filter appears after 12 recipients.
    • Save sends only what changed: "recipients/<address>": true | null. Recipients added by someone else while the panel was open are kept. Addresses are compared case-insensitively and escaped per RFC 6901.
  • Delete: type-the-address confirmation. Recipients' own mail isn't touched.
  • Stalwart lists have no owners, moderation or posting rules, so the panel doesn't offer any.

Mock: x:MailingList get/query/set with two sample lists, the live recipient-set shape, and refusals for a bad address, an address clash with an account, and a missing permission.

Live: the throwaway-list run on 2026-09-15 (see #361 and KNOWN-ISSUES) confirmed:

  • create with recipients as a set, and the read-back shape;
  • adding one recipient with a pointer;
  • the text filter;
  • destroy.

Not tried live: removing a recipient with null (the same set patch as group membership, which was confirmed), and the exact wording for an invalid recipient.

Translation: 25 new strings and 1 plural in all nine catalogues (1515/1531 each, 16 falling back as before).

Checked

  • Typecheck, 1256 web and 215 server tests pass, as do build and i18n:check.
  • New tests cover:
    • which recipient changes are sent (only added/removed, case-insensitive, pointer escaping);
    • paste parsing;
    • query and create payloads;
    • mock create/find/pointer/refusals;
    • panel: saves only changes, keeps unreadable input with a warning, read-only role.
  • In Chrome against the mock:
    • Announcements: removed one, pasted Bob Builder <[email protected]>, [email protected]; oops@ (two added, oops@ kept with a warning), saved (count 4→5), reloaded and it was still there;
    • created "Team" with 2 recipients, then deleted it through the dialog;
    • no console errors.

Merged 2026-09-15 as coffey-labs/ihasmail@37a0e28871

Rebuilt from: git history, session transcript.

Third of the five stacked Administration PRs. This one targets `feat/admin-groups` (#361). The five are meant to merge together, in order. **What it adds:** Mailing lists under Directory, after Groups. A list is its own object in Stalwart, `x:MailingList`, gated by `sysMailingListQuery`/`sysMailingListGet`. Same layout as Accounts and Groups: search, pages of 50, a recipient-count column, and a side panel. **Panel** - Display name, address (when creating), recipients and other addresses, all saved together. - **Recipients:** - Paste several at once: a spreadsheet column, a comma-separated line, or `Name <address>`. The name words are ignored. - Anything with an @ that isn't an address stays in the box with a warning, so it can be fixed. - A filter appears after 12 recipients. - Save sends only what changed: `"recipients/<address>": true | null`. Recipients added by someone else while the panel was open are kept. Addresses are compared case-insensitively and escaped per RFC 6901. - **Delete:** type-the-address confirmation. Recipients' own mail isn't touched. - Stalwart lists have no owners, moderation or posting rules, so the panel doesn't offer any. **Mock:** `x:MailingList` get/query/set with two sample lists, the live recipient-set shape, and refusals for a bad address, an address clash with an account, and a missing permission. **Live:** the throwaway-list run on 2026-09-15 (see #361 and KNOWN-ISSUES) confirmed: - create with `recipients` as a set, and the read-back shape; - adding one recipient with a pointer; - the `text` filter; - destroy. Not tried live: removing a recipient with `null` (the same set patch as group membership, which was confirmed), and the exact wording for an invalid recipient. **Translation:** 25 new strings and 1 plural in all nine catalogues (1515/1531 each, 16 falling back as before). **Checked** - Typecheck, 1256 web and 215 server tests pass, as do build and i18n:check. - New tests cover: - which recipient changes are sent (only added/removed, case-insensitive, pointer escaping); - paste parsing; - query and create payloads; - mock create/find/pointer/refusals; - panel: saves only changes, keeps unreadable input with a warning, read-only role. - In Chrome against the mock: - Announcements: removed one, pasted `Bob Builder <[email protected]>, [email protected]; oops@` (two added, `oops@` kept with a warning), saved (count 4→5), reloaded and it was still there; - created "Team" with 2 recipients, then deleted it through the dialog; - no console errors. **Merged** 2026-09-15 as coffey-labs/ihasmail@37a0e28871bc <sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.