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
@@ -177,6 +177,31 @@ export const catalog: Catalog = {
"Your organisation has reached the number of groups it is allowed.": "Sua organização atingiu o número de grupos permitido.",
"This group no longer exists. Someone may have deleted it.": "Este grupo não existe mais. Alguém pode tê-lo excluído.",
"The server did not say whether the group was created.": "O servidor não informou se o grupo foi criado.",
"Mailing lists": "Listas de e-mail",
"Mailing list": "Lista de e-mail",
"A list needs an address.": "Uma lista precisa de um endereço.",
"New mailing list": "Nova lista de e-mail",
"Your role lets you view mailing lists but not change them.": "Sua função permite ver as listas de e-mail, mas não alterá-las.",
"No domains are available to create a list on.": "Não há domínios disponíveis para criar uma lista.",
"Mail to these addresses goes to the list too. Changes apply when you save.": "Os e-mails para estes endereços também vão para a lista. As alterações valem ao salvar.",
"Create list": "Criar lista",
"Filter recipients": "Filtrar destinatários",
"No recipients match": "Nenhum destinatário corresponde",
"Add recipients": "Adicionar destinatários",
"Addresses, separated by commas": "Endereços separados por vírgulas",
"Not added, as they aren't addresses: {items}": "Não adicionados, pois não são endereços: {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.": "Os e-mails para a lista são repassados a cada destinatário, neste servidor ou em qualquer outro. Você pode colar vários de uma vez. As alterações valem ao salvar.",
"Mail to this address stops being passed on. The recipients' own mail is untouched.": "Os e-mails para este endereço deixam de ser repassados. Os e-mails dos próprios destinatários não são afetados.",
"Delete list…": "Excluir lista…",
"Delete list": "Excluir lista",
"Mail to this address is no longer passed on to anyone. It can't be undone.": "Os e-mails para este endereço não são mais repassados a ninguém. Isso não pode ser desfeito.",
"Addresses that pass mail on to everyone on them.": "Endereços que repassam os e-mails a todos que estão neles.",
"Search mailing lists": "Pesquisar listas de e-mail",
"No mailing lists match": "Nenhuma lista de e-mail corresponde",
"No mailing lists yet": "Nenhuma lista de e-mail ainda",
"Your organisation has reached the number of mailing lists it is allowed.": "Sua organização atingiu o número de listas de e-mail permitido.",
"This mailing list no longer exists. Someone may have deleted it.": "Esta lista de e-mail não existe mais. Alguém pode tê-la excluído.",
"The server did not say whether the list was created.": "O servidor não informou se a lista foi criada.",
"User": "Usuário",
"Administrator": "Administrador",
"Custom role": "Função personalizada",
@@ -1572,6 +1597,7 @@ export const catalog: Catalog = {
"{n} groups": { one: "{n} grupo", other: "{n} grupos" },
"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.": { one: "O {n} membro é retirado do grupo primeiro e perde o que era compartilhado com ele. Os e-mails do grupo são removidos em segundo plano, e isso não pode ser desfeito.", other: "Os {n} membros são retirados do grupo primeiro e perdem o que era compartilhado com ele. Os e-mails do grupo são removidos em segundo plano, e isso não pode ser desfeito." },
"{n} mailing lists": { one: "{n} lista de e-mails", other: "{n} listas de e-mails" },
"{n} recipients": { one: "{n} destinatário", other: "{n} destinatários" },
"{n} DKIM keys": { one: "{n} chave DKIM", other: "{n} chaves DKIM" },
"{n} other items": { one: "{n} outro item", other: "{n} outros itens" },
// ── Administration ────────────────────────────────────────────────