Add Mailing lists to Administration

A mailing list is an address that passes mail on to everyone on it. To
Stalwart it is its own object, x:MailingList, behind sysMailingList*, so
it gets its own section under Directory after Groups: search, fifty to a
page with each list's recipient count, and a panel to create, edit and
delete one.

Recipients are a property of the list, so unlike a group's members they
save with the rest of the panel. What Save sends for them is only what was
added and removed, one recipients/<address> pointer each -- the patch the
live server accepted -- so a recipient added elsewhere while the panel was
open is not taken out. They can be pasted several at a time, from a
spreadsheet column, a comma-separated line or Name <address>; anything with
an @ that is not an address stays in the box with a note. Past a dozen, a
filter narrows them.

That is all a list is in Stalwart -- no owners, moderation or posting
rules -- so that is all the panel offers.

The mock answers x:MailingList with two lists, the recipient set's live
shape, and the refusals a wrong address, a clash with an account and a
missing permission get.

Twenty-five new strings and one plural, in all nine catalogues.
This commit is contained in:
2026-09-15 08:47:04 -07:00
parent 79afc334ab
commit 627422d794
25 changed files with 1113 additions and 13 deletions
+26
View File
@@ -172,6 +172,31 @@ export const catalog: Catalog = {
"Your organisation has reached the number of groups it is allowed.": "您的组织已达到允许的群组数量。",
"This group no longer exists. Someone may have deleted it.": "此群组已不存在。可能已被他人删除。",
"The server did not say whether the group was created.": "服务器未说明群组是否已创建。",
"Mailing lists": "邮件列表",
"Mailing list": "邮件列表",
"A list needs an address.": "列表需要一个地址。",
"New mailing list": "新建邮件列表",
"Your role lets you view mailing lists but not change them.": "您的角色可以查看邮件列表,但不能更改。",
"No domains are available to create a list on.": "没有可用于创建列表的域名。",
"Mail to these addresses goes to the list too. Changes apply when you save.": "发往这些地址的邮件也会发到列表。更改在保存后生效。",
"Create list": "创建列表",
"Filter recipients": "筛选收件人",
"No recipients match": "没有匹配的收件人",
"Add recipients": "添加收件人",
"Addresses, separated by commas": "地址,用逗号分隔",
"Not added, as they aren't addresses: {items}": "未添加,因为它们不是地址:{items}",
"Mail to the list is passed on to every recipient, on this server or anywhere else. Paste several at once if you like. Changes apply when you save.": "发往列表的邮件会转发给每位收件人,无论其在本服务器还是其他服务器。可以一次粘贴多个。更改在保存后生效。",
"Mail to this address stops being passed on. The recipients' own mail is untouched.": "发往此地址的邮件将不再转发。收件人自己的邮件不受影响。",
"Delete list…": "删除列表…",
"Delete list": "删除列表",
"Mail to this address is no longer passed on to anyone. It can't be undone.": "发往此地址的邮件将不再转发给任何人。此操作无法撤销。",
"Addresses that pass mail on to everyone on them.": "将邮件转发给列表中每个人的地址。",
"Search mailing lists": "搜索邮件列表",
"No mailing lists match": "没有匹配的邮件列表",
"No mailing lists yet": "还没有邮件列表",
"Your organisation has reached the number of mailing lists it is allowed.": "您的组织已达到允许的邮件列表数量。",
"This mailing list no longer exists. Someone may have deleted it.": "此邮件列表已不存在。可能已被他人删除。",
"The server did not say whether the list was created.": "服务器未说明列表是否已创建。",
"User": "用户",
"Administrator": "管理员",
"Custom role": "自定义角色",
@@ -1576,6 +1601,7 @@ export const catalog: Catalog = {
"{n} groups": { other: "{n} 个群组" },
"Its {n} members are taken out of the group first, and lose what was shared with it. The group's own mail is removed in the background, and it can't be undone.": { other: "会先将 {n} 位成员移出群组,他们将失去与群组共享的内容。群组的邮件会在后台删除,且无法撤销。" },
"{n} mailing lists": { other: "{n} 个邮件列表" },
"{n} recipients": { other: "{n} 位收件人" },
"{n} DKIM keys": { other: "{n} 个 DKIM 密钥" },
"{n} other items": { other: "其他 {n} 项" },
// ── Administration ────────────────────────────────────────────────