Browse Source

Merge pull request #5623 from mailcow/staging

🛷 🐄 Moocember 2023 Update Revision A | Postfix CVE-2023-51764 Security Update
Patrick Schult 1 year ago
parent
commit
cb0b0235f0

+ 2 - 1
data/conf/postfix/anonymize_headers.pcre

@@ -12,7 +12,8 @@ if /^\s*Received: from.* \(.*rspamd-mailcow.*mailcow-network.*\).*\(Postcow\)/
   REPLACE Received: from rspamd (rspamd $3) by $4 (Postcow) with $5
   REPLACE Received: from rspamd (rspamd $3) by $4 (Postcow) with $5
 endif
 endif
 /^\s*X-Enigmail/        IGNORE
 /^\s*X-Enigmail/        IGNORE
-/^\s*X-Mailer/          IGNORE
+# Not removing Mailer by default, might be signed
+#/^\s*X-Mailer/          IGNORE
 /^\s*X-Originating-IP/  IGNORE
 /^\s*X-Originating-IP/  IGNORE
 /^\s*X-Forward/         IGNORE
 /^\s*X-Forward/         IGNORE
 # Not removing UA by default, might be signed
 # Not removing UA by default, might be signed

+ 1 - 0
data/conf/postfix/main.cf

@@ -11,6 +11,7 @@ smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 smtpd_relay_restrictions = permit_mynetworks,
 smtpd_relay_restrictions = permit_mynetworks,
   permit_sasl_authenticated,
   permit_sasl_authenticated,
   defer_unauth_destination
   defer_unauth_destination
+smtpd_forbid_bare_newline = yes
 # alias maps are auto-generated in postfix.sh on startup
 # alias maps are auto-generated in postfix.sh on startup
 alias_maps = hash:/etc/aliases
 alias_maps = hash:/etc/aliases
 alias_database = hash:/etc/aliases
 alias_database = hash:/etc/aliases

+ 30 - 30
data/web/lang/lang.pt-br.json

@@ -9,8 +9,8 @@
         "eas_reset": "Redefinir dispositivos EAS",
         "eas_reset": "Redefinir dispositivos EAS",
         "extend_sender_acl": "Permitir estender a ACL do remetente por endereços externos",
         "extend_sender_acl": "Permitir estender a ACL do remetente por endereços externos",
         "filters": "Filtros",
         "filters": "Filtros",
-        "login_as": "Faça login como usuário da caixa de correio",
-        "mailbox_relayhost": "Alterar relayhost para uma caixa de correio",
+        "login_as": "Faça login como usuário da mailbox",
+        "mailbox_relayhost": "Alterar relayhost para uma mailbox",
         "prohibited": "Proibido pela ACL",
         "prohibited": "Proibido pela ACL",
         "protocol_access": "Alterar o acesso ao protocolo",
         "protocol_access": "Alterar o acesso ao protocolo",
         "pushover": "Pushover",
         "pushover": "Pushover",
@@ -28,7 +28,7 @@
         "spam_score": "Pontuação de spam",
         "spam_score": "Pontuação de spam",
         "syncjobs": "Trabalhos de sincronização",
         "syncjobs": "Trabalhos de sincronização",
         "tls_policy": "Política de TLS",
         "tls_policy": "Política de TLS",
-        "unlimited_quota": "Cota ilimitada para caixas de correio"
+        "unlimited_quota": "Cota ilimitada para mailbox"
     },
     },
     "add": {
     "add": {
         "activate_filter_warn": "Todos os outros filtros serão desativados quando a opção ativa estiver marcada.",
         "activate_filter_warn": "Todos os outros filtros serão desativados quando a opção ativa estiver marcada.",
@@ -70,11 +70,11 @@
         "hostname": "Anfitrião",
         "hostname": "Anfitrião",
         "inactive": "Inativo",
         "inactive": "Inativo",
         "kind": "Gentil",
         "kind": "Gentil",
-        "mailbox_quota_def": "Cota de caixa de correio padrão",
-        "mailbox_quota_m": "Cota máxima por caixa de correio (MiB)",
+        "mailbox_quota_def": "Cota de caixa de mailbox",
+        "mailbox_quota_m": "Cota máxima por mailbox (MiB)",
         "mailbox_username": "Nome de usuário (parte esquerda de um endereço de e-mail)",
         "mailbox_username": "Nome de usuário (parte esquerda de um endereço de e-mail)",
         "max_aliases": "Máximo de aliases possíveis",
         "max_aliases": "Máximo de aliases possíveis",
-        "max_mailboxes": "Número máximo de caixas de correio possíveis",
+        "max_mailboxes": "Número máximo de mailboxes possíveis",
         "mins_interval": "Intervalo de votação (minutos)",
         "mins_interval": "Intervalo de votação (minutos)",
         "multiple_bookings": "Várias reservas",
         "multiple_bookings": "Várias reservas",
         "nexthop": "Próximo salto",
         "nexthop": "Próximo salto",
@@ -86,10 +86,10 @@
         "public_comment": "Comentário público",
         "public_comment": "Comentário público",
         "quota_mb": "Cota (MiB)",
         "quota_mb": "Cota (MiB)",
         "relay_all": "Retransmita todos os destinatários",
         "relay_all": "Retransmita todos os destinatários",
-        "relay_all_info": "↪ Se você optar por <b>não</b> retransmitir todos os destinatários, precisará adicionar uma caixa de correio (“cega”) para cada destinatário que deve ser retransmitido.",
+        "relay_all_info": "↪ Se você optar por <b>não</b> retransmitir todos os destinatários, precisará adicionar uma mailbox (“cega”) para cada destinatário que deve ser retransmitido.",
         "relay_domain": "Retransmitir este domínio",
         "relay_domain": "Retransmitir este domínio",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Informações</div> Você pode definir mapas de transporte para um destino personalizado para esse domínio. Se não for definido, uma pesquisa MX será feita.",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Informações</div> Você pode definir mapas de transporte para um destino personalizado para esse domínio. Se não for definido, uma pesquisa MX será feita.",
-        "relay_unknown_only": "Retransmita somente caixas de correio não existentes. As caixas de correio existentes serão entregues localmente.",
+        "relay_unknown_only": "Retransmita somente mailboxes não existentes. As mailboxes existentes serão entregues localmente.",
         "relayhost_wrapped_tls_info": "Por favor, <b>não</b> use portas com cobertura TLS (usadas principalmente na porta 465). <br>\r\nUse qualquer porta não encapsulada e emita STARTTLS. Uma política de TLS para impor o TLS pode ser criada em “mapas de políticas de TLS”.",
         "relayhost_wrapped_tls_info": "Por favor, <b>não</b> use portas com cobertura TLS (usadas principalmente na porta 465). <br>\r\nUse qualquer porta não encapsulada e emita STARTTLS. Uma política de TLS para impor o TLS pode ser criada em “mapas de políticas de TLS”.",
         "select": "Selecione...",
         "select": "Selecione...",
         "select_domain": "Selecione primeiro um domínio",
         "select_domain": "Selecione primeiro um domínio",
@@ -212,7 +212,7 @@
         "in_use_by": "Em uso por",
         "in_use_by": "Em uso por",
         "inactive": "Inativo",
         "inactive": "Inativo",
         "include_exclude": "Incluir/Excluir",
         "include_exclude": "Incluir/Excluir",
-        "include_exclude_info": "Por padrão - sem seleção - <b>todas as caixas de correio são endereçadas</b>",
+        "include_exclude_info": "Por padrão - sem seleção - <b>todas as mailboxes são endereçadas</b>",
         "includes": "Inclua esses destinatários",
         "includes": "Inclua esses destinatários",
         "ip_check": "Verificação de IP",
         "ip_check": "Verificação de IP",
         "ip_check_disabled": "A verificação de IP está desativada. Você pode ativá-lo em <br><strong>Sistema > Configuração > Opções > Personalizar</strong>",
         "ip_check_disabled": "A verificação de IP está desativada. Você pode ativá-lo em <br><strong>Sistema > Configuração > Opções > Personalizar</strong>",
@@ -268,13 +268,13 @@
         "quarantine_release_format": "Formato dos itens lançados",
         "quarantine_release_format": "Formato dos itens lançados",
         "quarantine_release_format_att": "Como anexo",
         "quarantine_release_format_att": "Como anexo",
         "quarantine_release_format_raw": "Original não modificado",
         "quarantine_release_format_raw": "Original não modificado",
-        "quarantine_retention_size": "<b>Retenções por caixa de correio: <small>0</small> indica inativo.</b> <br>",
+        "quarantine_retention_size": "Retenções por mailbox: <br><small>0 indica <b>inativo</b>.</small>",
         "quota_notification_html": "Modelo de e-mail de notificação: <br><small>deixe em branco para restaurar o modelo padrão.</small>",
         "quota_notification_html": "Modelo de e-mail de notificação: <br><small>deixe em branco para restaurar o modelo padrão.</small>",
         "quota_notification_sender": "Remetente do e-mail de notificação",
         "quota_notification_sender": "Remetente do e-mail de notificação",
         "quota_notification_subject": "Assunto do e-mail de notificação",
         "quota_notification_subject": "Assunto do e-mail de notificação",
         "quota_notifications": "Notificações de cotas",
         "quota_notifications": "Notificações de cotas",
         "quota_notifications_info": "As notificações de cota são enviadas aos usuários uma vez ao ultrapassar 80% e uma vez ao ultrapassar 95% de uso.",
         "quota_notifications_info": "As notificações de cota são enviadas aos usuários uma vez ao ultrapassar 80% e uma vez ao ultrapassar 95% de uso.",
-        "quota_notifications_vars": "{{percent}} é igual à cota atual do usuário <br>{{username}} é o nome da caixa de correio",
+        "quota_notifications_vars": "{{percent}} é igual à cota atual do usuário <br>{{username}} é o nome da mailbox",
         "queue_unban": "não banido",
         "queue_unban": "não banido",
         "r_active": "Restrições ativas",
         "r_active": "Restrições ativas",
         "r_inactive": "Restrições inativas",
         "r_inactive": "Restrições inativas",
@@ -302,7 +302,7 @@
         "rsettings_insert_preset": "Inserir exemplo de predefinição “%s”",
         "rsettings_insert_preset": "Inserir exemplo de predefinição “%s”",
         "rsettings_preset_1": "Desative tudo, exceto o DKIM e o limite de taxa para usuários autenticados",
         "rsettings_preset_1": "Desative tudo, exceto o DKIM e o limite de taxa para usuários autenticados",
         "rsettings_preset_2": "Postmasters querem spam",
         "rsettings_preset_2": "Postmasters querem spam",
-        "rsettings_preset_3": "Permitir somente remetentes específicos para uma caixa de correio (ou seja, uso somente como caixa de correio interna)",
+        "rsettings_preset_3": "Permitir somente remetentes específicos para uma mailbox (ou seja, uso somente como mailbox interna)",
         "rsettings_preset_4": "Desativar Rspamd para um domínio",
         "rsettings_preset_4": "Desativar Rspamd para um domínio",
         "rspamd_com_settings": "Um nome de configuração será gerado automaticamente, veja os exemplos de predefinições abaixo. Para obter mais detalhes, consulte a documentação <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">do Rspamd</a>",
         "rspamd_com_settings": "Um nome de configuração será gerado automaticamente, veja os exemplos de predefinições abaixo. Para obter mais detalhes, consulte a documentação <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">do Rspamd</a>",
         "rspamd_global_filters": "Mapas de filtro globais",
         "rspamd_global_filters": "Mapas de filtro globais",
@@ -369,7 +369,7 @@
         "comment_too_long": "Comentário muito longo, máximo de 160 caracteres permitidos",
         "comment_too_long": "Comentário muito longo, máximo de 160 caracteres permitidos",
         "cors_invalid_method": "Método de permissão inválido especificado",
         "cors_invalid_method": "Método de permissão inválido especificado",
         "cors_invalid_origin": "Origem de permissão inválida especificada",
         "cors_invalid_origin": "Origem de permissão inválida especificada",
-        "defquota_empty": "A cota padrão por caixa de correio não deve ser 0.",
+        "defquota_empty": "A cota padrão por mailbox não deve ser 0.",
         "demo_mode_enabled": "O modo de demonstração está ativado",
         "demo_mode_enabled": "O modo de demonstração está ativado",
         "description_invalid": "A descrição do recurso para %s é inválida",
         "description_invalid": "A descrição do recurso para %s é inválida",
         "dkim_domain_or_sel_exists": "Existe uma chave DKIM para “%s” e não será substituída",
         "dkim_domain_or_sel_exists": "Existe uma chave DKIM para “%s” e não será substituída",
@@ -407,22 +407,22 @@
         "invalid_recipient_map_old": "Destinatário original inválido especificado: %s",
         "invalid_recipient_map_old": "Destinatário original inválido especificado: %s",
         "ip_list_empty": "A lista de IPs permitidos não pode estar vazia",
         "ip_list_empty": "A lista de IPs permitidos não pode estar vazia",
         "is_alias": "%s já é conhecido como endereço de alias",
         "is_alias": "%s já é conhecido como endereço de alias",
-        "is_alias_or_mailbox": "%s já é conhecido como alias, caixa de correio ou endereço de alias expandido a partir de um domínio de alias.",
+        "is_alias_or_mailbox": "%s já é conhecido como alias, mailbox ou alias de endereço expandido a partir de um domínio de alias.",
         "is_spam_alias": "%s já é conhecido como endereço de alias temporário (endereço de alias de spam)",
         "is_spam_alias": "%s já é conhecido como endereço de alias temporário (endereço de alias de spam)",
         "last_key": "A última chave não pode ser excluída. Em vez disso, desative o TFA.",
         "last_key": "A última chave não pode ser excluída. Em vez disso, desative o TFA.",
         "login_failed": "Falha no login",
         "login_failed": "Falha no login",
         "mailbox_defquota_exceeds_mailbox_maxquota": "A cota padrão excede o limite máximo da cota",
         "mailbox_defquota_exceeds_mailbox_maxquota": "A cota padrão excede o limite máximo da cota",
-        "mailbox_invalid": "O nome da caixa de correio é inválido",
+        "mailbox_invalid": "O nome da mailbox é inválido",
         "mailbox_quota_exceeded": "A cota excede o limite do domínio (máx. %d MiB)",
         "mailbox_quota_exceeded": "A cota excede o limite do domínio (máx. %d MiB)",
         "mailbox_quota_exceeds_domain_quota": "A cota máxima excede o limite da cota do domínio",
         "mailbox_quota_exceeds_domain_quota": "A cota máxima excede o limite da cota do domínio",
         "mailbox_quota_left_exceeded": "Não há espaço restante (espaço restante: %d MiB)",
         "mailbox_quota_left_exceeded": "Não há espaço restante (espaço restante: %d MiB)",
-        "mailboxes_in_use": "O máximo de caixas de correio deve ser maior ou igual a %d",
+        "mailboxes_in_use": "O máximo de mailboxes deve ser maior ou igual a %d",
         "malformed_username": "Nome de usuário malformado",
         "malformed_username": "Nome de usuário malformado",
         "map_content_empty": "O conteúdo do mapa não pode estar vazio",
         "map_content_empty": "O conteúdo do mapa não pode estar vazio",
         "max_alias_exceeded": "Número máximo de aliases excedido",
         "max_alias_exceeded": "Número máximo de aliases excedido",
-        "max_mailbox_exceeded": "Número máximo de caixas de correio excedido (%d de %d)",
-        "max_quota_in_use": "A cota da caixa de correio deve ser maior ou igual a %d MiB",
-        "maxquota_empty": "A cota máxima por caixa de correio não deve ser 0.",
+        "max_mailbox_exceeded": "Número máximo de mailboxes excedido (%d de %d)",
+        "max_quota_in_use": "A cota da mailbox deve ser maior ou igual a %d MiB",
+        "maxquota_empty": "A cota máxima por mailbox não deve ser 0.",
         "mysql_error": "Erro do MySQL: %s",
         "mysql_error": "Erro do MySQL: %s",
         "network_host_invalid": "Rede ou host inválidos: %s",
         "network_host_invalid": "Rede ou host inválidos: %s",
         "next_hop_interferes": "%s interfere com o nexthop %s",
         "next_hop_interferes": "%s interfere com o nexthop %s",
@@ -619,11 +619,11 @@
         "kind": "Gentil",
         "kind": "Gentil",
         "last_modified": "Última modificação",
         "last_modified": "Última modificação",
         "lookup_mx": "Destination é uma expressão regular que corresponde ao nome MX (<code>.*\\ .google\\ .com</code> para rotear todos os e-mails direcionados a um MX que termina em google.com nesse salto)",
         "lookup_mx": "Destination é uma expressão regular que corresponde ao nome MX (<code>.*\\ .google\\ .com</code> para rotear todos os e-mails direcionados a um MX que termina em google.com nesse salto)",
-        "mailbox": "Editar caixa de correio",
-        "mailbox_quota_def": "Cota de caixa de correio padrão",
+        "mailbox": "Editar mailbox",
+        "mailbox_quota_def": "Cota mailbox padrão",
         "mailbox_relayhost_info": "Aplicado somente à caixa de correio e aos aliases diretos, substitui um host de retransmissão de domínio.",
         "mailbox_relayhost_info": "Aplicado somente à caixa de correio e aos aliases diretos, substitui um host de retransmissão de domínio.",
         "max_aliases": "Máximo de aliases",
         "max_aliases": "Máximo de aliases",
-        "max_mailboxes": "Número máximo de caixas de correio possíveis",
+        "max_mailboxes": "Número máximo de mailboxes possíveis",
         "max_quota": "Cota máxima por caixa de correio (MiB)",
         "max_quota": "Cota máxima por caixa de correio (MiB)",
         "maxage": "Duração máxima das mensagens em dias que serão pesquisadas remotamente <br><small>(0 = ignorar a idade</small>)",
         "maxage": "Duração máxima das mensagens em dias que serão pesquisadas remotamente <br><small>(0 = ignorar a idade</small>)",
         "maxbytespersecond": "Máximo de bytes por segundo <br><small>(0 = ilimitado</small>)",
         "maxbytespersecond": "Máximo de bytes por segundo <br><small>(0 = ilimitado</small>)",
@@ -657,7 +657,7 @@
         "relay_all_info": "↪ Se você optar por <b>não</b> retransmitir todos os destinatários, precisará adicionar uma caixa de correio (“cega”) para cada destinatário que deve ser retransmitido.",
         "relay_all_info": "↪ Se você optar por <b>não</b> retransmitir todos os destinatários, precisará adicionar uma caixa de correio (“cega”) para cada destinatário que deve ser retransmitido.",
         "relay_domain": "Retransmitir este domínio",
         "relay_domain": "Retransmitir este domínio",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Informações</div> Você pode definir mapas de transporte para um destino personalizado para esse domínio. Se não for definido, uma pesquisa MX será feita.",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Informações</div> Você pode definir mapas de transporte para um destino personalizado para esse domínio. Se não for definido, uma pesquisa MX será feita.",
-        "relay_unknown_only": "Retransmita somente caixas de correio não existentes. As caixas de correio existentes serão entregues localmente.",
+        "relay_unknown_only": "Retransmita somente mailboxes não existentes. As caixas de mailboxes serão entregues localmente.",
         "relayhost": "Transportes dependentes do remetente",
         "relayhost": "Transportes dependentes do remetente",
         "remove": "Remover",
         "remove": "Remover",
         "resource": "Recurso",
         "resource": "Recurso",
@@ -688,7 +688,7 @@
         "username": "Nome de usuário",
         "username": "Nome de usuário",
         "validate_save": "Valide e salve",
         "validate_save": "Valide e salve",
         "custom_attributes": "Atributos personalizados",
         "custom_attributes": "Atributos personalizados",
-        "mbox_exclude": "Excluir caixas de email"
+        "mbox_exclude": "Excluir mailboxes"
     },
     },
     "fido2": {
     "fido2": {
         "confirm": "Confirme",
         "confirm": "Confirme",
@@ -831,13 +831,13 @@
         "last_run_reset": "Programe a seguir",
         "last_run_reset": "Programe a seguir",
         "mailbox": "Caixa de correio",
         "mailbox": "Caixa de correio",
         "mailbox_defaults": "Configurações padrão",
         "mailbox_defaults": "Configurações padrão",
-        "mailbox_defaults_info": "Defina as configurações padrão para novas caixas de correio.",
+        "mailbox_defaults_info": "Defina as configurações padrão para novas mailboxes.",
         "mailbox_defquota": "Tamanho padrão da caixa de correio",
         "mailbox_defquota": "Tamanho padrão da caixa de correio",
         "mailbox_templates": "Modelos de caixa de correio",
         "mailbox_templates": "Modelos de caixa de correio",
         "mailbox_quota": "Tamanho máximo de uma caixa de correio",
         "mailbox_quota": "Tamanho máximo de uma caixa de correio",
-        "mailboxes": "Caixas de correio",
+        "mailboxes": "mailboxes",
         "max_aliases": "Máximo de aliases",
         "max_aliases": "Máximo de aliases",
-        "max_mailboxes": "Número máximo de caixas de correio possíveis",
+        "max_mailboxes": "Número máximo de mailboxes possíveis",
         "max_quota": "Cota máxima por caixa de correio",
         "max_quota": "Cota máxima por caixa de correio",
         "mins_interval": "Intervalo (min)",
         "mins_interval": "Intervalo (min)",
         "msg_num": "Mensagem #",
         "msg_num": "Mensagem #",
@@ -865,7 +865,7 @@
         "recipient_map_old_info": "O destino original do mapa de um destinatário deve ser um endereço de e-mail válido ou um nome de domínio.",
         "recipient_map_old_info": "O destino original do mapa de um destinatário deve ser um endereço de e-mail válido ou um nome de domínio.",
         "recipient_maps": "Mapas de destinatários",
         "recipient_maps": "Mapas de destinatários",
         "relay_all": "Retransmita todos os destinatários",
         "relay_all": "Retransmita todos os destinatários",
-        "relay_unknown": "Retransmitir caixas de correio desconhecidas",
+        "relay_unknown": "Retransmitir mailboxes desconhecidas",
         "remove": "Remover",
         "remove": "Remover",
         "resources": "Recursos",
         "resources": "Recursos",
         "running": "Executando",
         "running": "Executando",
@@ -1010,7 +1010,7 @@
         "help": "Mostrar/ocultar painel de ajuda",
         "help": "Mostrar/ocultar painel de ajuda",
         "imap_smtp_server_auth_info": "Use seu endereço de e-mail completo e o mecanismo de autenticação PLAIN. <br>\r\nSeus dados de login serão criptografados pela criptografia obrigatória do lado do servidor.",
         "imap_smtp_server_auth_info": "Use seu endereço de e-mail completo e o mecanismo de autenticação PLAIN. <br>\r\nSeus dados de login serão criptografados pela criptografia obrigatória do lado do servidor.",
         "mailcow_apps_detail": "Use um aplicativo mailcow para acessar seus e-mails, calendário, contatos e muito mais.",
         "mailcow_apps_detail": "Use um aplicativo mailcow para acessar seus e-mails, calendário, contatos e muito mais.",
-        "mailcow_panel_detail": "<b>Os administradores de domínio</b> criam, modificam ou excluem caixas de correio e aliases, alteram domínios e leem mais informações sobre seus domínios atribuídos. <br>\r\n<b>Os usuários de caixas de correio</b> podem criar aliases com limite de tempo (aliases de spam), alterar suas configurações de senha e filtro de spam."
+        "mailcow_panel_detail": "<b>Os administradores de domínio</b> criam, modificam ou excluem mailboxes e aliases, alteram domínios e leem mais informações sobre seus domínios atribuídos. <br>\n<b>Os usuários de caixas de correio</b> podem criar aliases com limite de tempo (aliases de spam), alterar suas configurações de senha e filtro de spam."
     },
     },
     "success": {
     "success": {
         "acl_saved": "ACL para o objeto %s salvo",
         "acl_saved": "ACL para o objeto %s salvo",
@@ -1298,7 +1298,7 @@
         "ip_invalid": "IP inválido ignorado: %s",
         "ip_invalid": "IP inválido ignorado: %s",
         "is_not_primary_alias": "Alias não primário ignorado %s",
         "is_not_primary_alias": "Alias não primário ignorado %s",
         "no_active_admin": "Não é possível desativar o último administrador ativo",
         "no_active_admin": "Não é possível desativar o último administrador ativo",
-        "quota_exceeded_scope": "Cota de domínio excedida: somente caixas de correio ilimitadas podem ser criadas nesse escopo de domínio.",
+        "quota_exceeded_scope": "Cota de domínio excedida: somente mailboxes ilimitadas podem ser criadas nesse escopo de domínio.",
         "session_token": "Token de formulário inválido: incompatibilidade de token",
         "session_token": "Token de formulário inválido: incompatibilidade de token",
         "session_ua": "Token de formulário inválido: erro de validação do agente de usuário"
         "session_ua": "Token de formulário inválido: erro de validação do agente de usuário"
     }
     }

+ 110 - 12
data/web/lang/lang.zh-tw.json

@@ -107,7 +107,8 @@
         "timeout2": "本地主機連線逾時時間",
         "timeout2": "本地主機連線逾時時間",
         "username": "使用者名稱",
         "username": "使用者名稱",
         "validate": "驗證",
         "validate": "驗證",
-        "validation_success": "驗證成功"
+        "validation_success": "驗證成功",
+        "dry": "模擬同步"
     },
     },
     "admin": {
     "admin": {
         "access": "存取",
         "access": "存取",
@@ -335,7 +336,22 @@
         "username": "使用者名稱",
         "username": "使用者名稱",
         "validate_license_now": "與證書伺服器驗證 GUID",
         "validate_license_now": "與證書伺服器驗證 GUID",
         "verify": "驗證",
         "verify": "驗證",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "f2b_manage_external_info": "Fail2ban仍會維護禁令列表,但不會主動設定規則來阻止流量。 使用下面產生的禁止清單從外部阻止流量。",
+        "allowed_origins": "存取控制允許來源",
+        "logo_dark_label": "深色模式",
+        "logo_normal_label": "標準",
+        "f2b_ban_time_increment": "禁令時間會隨著每次禁令增加",
+        "copy_to_clipboard": "文字已複製到剪貼簿!",
+        "cors_settings": "CORS 設定",
+        "f2b_manage_external": "外部管理 Fail2Ban",
+        "f2b_max_ban_time": "最大限度。 禁止時間(s)",
+        "allowed_methods": "存取控制允許方法",
+        "ip_check": "IP檢查",
+        "ip_check_opt_in": "選擇使用第三方服務 <strong>ipv4.mailcow.email</strong> 和 <strong>ipv6.mailcow.email</strong> 來解析外部 IP 位址。",
+        "ip_check_disabled": "IP 檢查已停用。 您可以在<br> <strong>系統 > 配置 > 選項 > 自訂</strong>下啟用它",
+        "options": "選項",
+        "queue_unban": "解除禁令"
     },
     },
     "danger": {
     "danger": {
         "access_denied": "存取拒絕或表單資料有誤",
         "access_denied": "存取拒絕或表單資料有誤",
@@ -454,7 +470,17 @@
         "username_invalid": "使用者名稱 %s 無法使用",
         "username_invalid": "使用者名稱 %s 無法使用",
         "validity_missing": "請設定有效期",
         "validity_missing": "請設定有效期",
         "value_missing": "請填入所有欄位",
         "value_missing": "請填入所有欄位",
-        "yotp_verification_failed": "Yubico OTP 認證失敗: %s"
+        "yotp_verification_failed": "Yubico OTP 認證失敗: %s",
+        "webauthn_authenticator_failed": "找不到所選的驗證器",
+        "webauthn_publickey_failed": "沒有為選定的身份驗證器儲存公鑰",
+        "webauthn_username_failed": "所選驗證器屬於另一個帳戶",
+        "cors_invalid_method": "指定的允許方法無效",
+        "cors_invalid_origin": "指定的允許來源無效",
+        "demo_mode_enabled": "演示模式已啟用",
+        "extended_sender_acl_denied": "缺少設定外部寄件者地址的 ACL",
+        "template_exists": "模板 %s 已存在",
+        "template_id_invalid": "範本 ID %s 無效",
+        "template_name_invalid": "模板名稱無效"
     },
     },
     "debug": {
     "debug": {
         "chart_this_server": "圖表 (此伺服器)",
         "chart_this_server": "圖表 (此伺服器)",
@@ -473,7 +499,7 @@
         "restart_container": "重新啟動",
         "restart_container": "重新啟動",
         "service": "服務",
         "service": "服務",
         "size": "大小",
         "size": "大小",
-        "solr_dead": "Solr 正在啟動、停用或已停止運行",
+        "solr_dead": "Solr 正在啟動,停用或已停止運行.",
         "solr_status": "Solr 狀態",
         "solr_status": "Solr 狀態",
         "started_at": "啟動於",
         "started_at": "啟動於",
         "started_on": "啟動於",
         "started_on": "啟動於",
@@ -481,7 +507,19 @@
         "success": "成功",
         "success": "成功",
         "system_containers": "系統和容器",
         "system_containers": "系統和容器",
         "uptime": "運行時間",
         "uptime": "運行時間",
-        "username": "使用者名稱"
+        "username": "使用者名稱",
+        "architecture": "結構",
+        "current_time": "系統時間",
+        "container_running": "正在執行",
+        "memory": "記憶",
+        "container_disabled": "容器停止或停用",
+        "container_stopped": "已停止",
+        "cores": "核心",
+        "error_show_ip": "無法解析公用IP位址",
+        "show_ip": "顯示公網IP",
+        "update_available": "有可用更新",
+        "no_update_available": "系統已經是最新版本",
+        "update_failed": "無法檢查更新"
     },
     },
     "diagnostics": {
     "diagnostics": {
         "cname_from_a": "由 A/AAAA 紀錄獲取。只要紀錄指向正確的資源,此功能就會持續運作。",
         "cname_from_a": "由 A/AAAA 紀錄獲取。只要紀錄指向正確的資源,此功能就會持續運作。",
@@ -607,7 +645,11 @@
         "title": "編輯物件",
         "title": "編輯物件",
         "unchanged_if_empty": "如果不更改則留空",
         "unchanged_if_empty": "如果不更改則留空",
         "username": "使用者名稱",
         "username": "使用者名稱",
-        "validate_save": "驗證並儲存"
+        "validate_save": "驗證並儲存",
+        "domain_footer_info": "網域範圍的頁尾將會新增至與該網域內的位址關聯的所有外發電子郵件。 <br> 以下變數可用於頁尾:",
+        "custom_attributes": "自訂屬性",
+        "mbox_exclude": "排除信箱",
+        "pushover_sound": "聲音"
     },
     },
     "fido2": {
     "fido2": {
         "confirm": "確認",
         "confirm": "確認",
@@ -646,7 +688,10 @@
         "quarantine": "隔離",
         "quarantine": "隔離",
         "restart_netfilter": "重新啟動 netfilter",
         "restart_netfilter": "重新啟動 netfilter",
         "restart_sogo": "重新啟動 SOGo",
         "restart_sogo": "重新啟動 SOGo",
-        "user_settings": "使用者設定"
+        "user_settings": "使用者設定",
+        "email": "電子郵件",
+        "mailcow_system": "系統",
+        "mailcow_config": "配置"
     },
     },
     "info": {
     "info": {
         "awaiting_tfa_confirmation": "等待 TFA 確認",
         "awaiting_tfa_confirmation": "等待 TFA 確認",
@@ -829,7 +874,13 @@
         "username": "使用者名稱",
         "username": "使用者名稱",
         "waiting": "等待中",
         "waiting": "等待中",
         "weekly": "每週",
         "weekly": "每週",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "templates": "範本",
+        "domain_templates": "域模板",
+        "add_template": "新增模板",
+        "mailbox_templates": "信箱模板",
+        "relay_unknown": "轉發未知信箱",
+        "template": "範本"
     },
     },
     "oauth2": {
     "oauth2": {
         "access_denied": "請使用信箱使用者登入來進行 OAuth2 授權",
         "access_denied": "請使用信箱使用者登入來進行 OAuth2 授權",
@@ -929,7 +980,7 @@
         "delete_filters": "過濾器 %s 已刪除",
         "delete_filters": "過濾器 %s 已刪除",
         "deleted_syncjob": "同步任務 ID %s 已刪除",
         "deleted_syncjob": "同步任務 ID %s 已刪除",
         "deleted_syncjobs": "同步任務 %s 已刪除",
         "deleted_syncjobs": "同步任務 %s 已刪除",
-        "dkim_added": " DKIM 金鑰 %s 已儲存",
+        "dkim_added": "DKIM 金鑰 %s 已儲存",
         "domain_add_dkim_available": "DKIM 金鑰已存在",
         "domain_add_dkim_available": "DKIM 金鑰已存在",
         "dkim_duplicated": "域名的 DKIM 金鑰 %s 已複製到 %s",
         "dkim_duplicated": "域名的 DKIM 金鑰 %s 已複製到 %s",
         "dkim_removed": " DKIM 金鑰 %s 已刪除",
         "dkim_removed": " DKIM 金鑰 %s 已刪除",
@@ -976,14 +1027,21 @@
         "settings_map_added": "設定規則已新增",
         "settings_map_added": "設定規則已新增",
         "settings_map_removed": "設定規則 ID %s 已刪除",
         "settings_map_removed": "設定規則 ID %s 已刪除",
         "sogo_profile_reset": "使用者 %s 的 SOGo 個人頁面已重設",
         "sogo_profile_reset": "使用者 %s 的 SOGo 個人頁面已重設",
-        "tls_policy_map_entry_deleted": " TLS 規則 ID %s 已刪除",
+        "tls_policy_map_entry_deleted": "TLS 規則 ID %s 已刪除",
         "tls_policy_map_entry_saved": "TLS 規則 \"%s\" 已儲存",
         "tls_policy_map_entry_saved": "TLS 規則 \"%s\" 已儲存",
         "ui_texts": "UI 內文更改已儲存",
         "ui_texts": "UI 內文更改已儲存",
         "upload_success": "檔案已成功上傳",
         "upload_success": "檔案已成功上傳",
         "verified_fido2_login": "FIDO2 登入驗證成功",
         "verified_fido2_login": "FIDO2 登入驗證成功",
         "verified_totp_login": "TOTP 登入驗證成功",
         "verified_totp_login": "TOTP 登入驗證成功",
         "verified_webauthn_login": "WebAuthn 登入驗證成功",
         "verified_webauthn_login": "WebAuthn 登入驗證成功",
-        "verified_yotp_login": "Yubico OTP 登入驗證成功"
+        "verified_yotp_login": "Yubico OTP 登入驗證成功",
+        "template_removed": "模板 ID %s 已刪除",
+        "template_added": "新增了模板 %s",
+        "template_modified": "模板 %s 的變更已儲存",
+        "cors_headers_edited": "CORS 設定已儲存",
+        "domain_footer_modified": "網域頁尾 %s 的變更已儲存",
+        "f2b_banlist_refreshed": "禁止清單 ID 已成功刷新。",
+        "ip_check_opt_in_modified": "IP檢查已成功儲存"
     },
     },
     "tfa": {
     "tfa": {
         "api_register": "%s 使用 Yubico Cloud API,請在<a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">這裡</a>為這把金鑰獲取 API 金鑰",
         "api_register": "%s 使用 Yubico Cloud API,請在<a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">這裡</a>為這把金鑰獲取 API 金鑰",
@@ -1171,7 +1229,9 @@
         "weeks": "週",
         "weeks": "週",
         "with_app_password": "使用應用程式密碼",
         "with_app_password": "使用應用程式密碼",
         "year": "年",
         "year": "年",
-        "years": "年"
+        "years": "年",
+        "attribute": "屬性",
+        "pushover_sound": "聲音"
     },
     },
     "warning": {
     "warning": {
         "cannot_delete_self": "不能刪除已登入的使用者",
         "cannot_delete_self": "不能刪除已登入的使用者",
@@ -1185,5 +1245,43 @@
         "quota_exceeded_scope": "域名容量配額已滿: 此域名現在只能創建無限容量的信箱。",
         "quota_exceeded_scope": "域名容量配額已滿: 此域名現在只能創建無限容量的信箱。",
         "session_token": "表單驗證失敗: 驗證碼錯誤",
         "session_token": "表單驗證失敗: 驗證碼錯誤",
         "session_ua": "表單驗證失敗: User-Agent 校驗錯誤"
         "session_ua": "表單驗證失敗: User-Agent 校驗錯誤"
+    },
+    "datatables": {
+        "infoEmpty": "顯示 0 到 0 個條目,共 0 個條目",
+        "infoFiltered": "(從_MAX_個總條目中過濾)",
+        "lengthMenu": "顯示_選單_條目",
+        "loadingRecords": "載入中...",
+        "processing": "請稍等...",
+        "search": "搜尋:",
+        "zeroRecords": "未找到符合的記錄",
+        "paginate": {
+            "first": "第一的",
+            "last": "最後的",
+            "next": "下一個",
+            "previous": "上一個"
+        },
+        "aria": {
+            "sortAscending": ":啟動以升序對列進行排序",
+            "sortDescending": ":啟動以降序對列進行排序"
+        },
+        "expand_all": "展開全部",
+        "info": "顯示 _START_ 到 _END_ 條,共 _TOTAL_ 條",
+        "collapse_all": "全部折疊",
+        "emptyTable": "表中沒有可用數據",
+        "thousands": ",",
+        "decimal": "."
+    },
+    "queue": {
+        "deliver_mail_legend": "嘗試重新投遞選定的郵件。",
+        "show_message": "顯示訊息",
+        "unban": "解除禁令隊列",
+        "legend": "郵件隊列操作功能:",
+        "delete": "刪除所有",
+        "flush": "刷新隊列",
+        "info": "郵件隊列包含所有等待投遞的電子郵件。 如果電子郵件長時間滯留在郵件隊列中,系統會自動將其刪除。<br>對應郵件的錯誤訊息會提供有關郵件無法送達的原因的資訊。",
+        "ays": "請確認您要刪除目前隊列中的所有項目。",
+        "deliver_mail": "遞送",
+        "queue_manager": "隊列管理器",
+        "unhold_mail_legend": "釋放選定的郵件以供投遞。 (需事先持有)"
     }
     }
 }
 }

+ 1 - 1
docker-compose.yml

@@ -298,7 +298,7 @@ services:
             - dovecot
             - dovecot
 
 
     postfix-mailcow:
     postfix-mailcow:
-      image: mailcow/postfix:1.72
+      image: mailcow/postfix:1.73
       depends_on:
       depends_on:
         mysql-mailcow:
         mysql-mailcow:
           condition: service_started
           condition: service_started

+ 1 - 1
helper-scripts/nextcloud.sh

@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 #!/usr/bin/env bash
 # renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?<version>.*)$
 # renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?<version>.*)$
-NEXTCLOUD_VERSION=28.0.0
+NEXTCLOUD_VERSION=28.0.1
 
 
 echo -ne "Checking prerequisites..."
 echo -ne "Checking prerequisites..."
 sleep 1
 sleep 1