#23: show real data, unify the surfaces and make enrolment scannable
The interface was reporting things that were not true. Several screens were
mockups wired to nothing, and a reader with the console in Portuguese was
served a mixture of two languages.
Fabricated data, removed:
- The outbound queue was two invented jobs held in component state. Retry and
Freeze only edited that local array, so the screen showed the same two rows
on every deployment and reported success for actions that never happened.
"Freeze" named an operation the backend has never implemented. It now reads
/api/v1/admin/queue, which was already serving the real thing, and offers
retry and cancel, which exist.
- Every dashboard KPI fell back to an invented constant (1420 received, 890
sent, 3 queued, 18.4% disk), so an unreachable API produced a dashboard of
plausible traffic for a server that might have delivered nothing. Two of
those fields were never returned by the endpoint at all, so the fake disk
figure was what everyone always saw. DMARC did the same with 1250/98%/97%.
- The domains screen showed thirteen DNS records for example.com, all marked
VERIFIED, and posted {domain_id: "default-domain"} to endpoints expecting a
real id. DKIM rotation sends "domain", not "domain_id", so its 400 was
swallowed and a made-up TXT record displayed as though a key had been
issued: rotation had never once worked from this screen.
- The TLS panel asserted a Let's Encrypt RSA 4096 certificate and verified
DANE from static markup, on a deployment currently serving a self-signed
one. It now reads the cert watcher via /api/v1/admin/tls.
- The readiness scorecard printed "10 / 10 all checks passed" regardless of
what preflight reported, including failures.
- A message trace that found nothing invented a five-step delivery - TLS 1.3
accepted, SPF pass, spam score 0.8 - for a message that does not exist.
- Both sidebars showed a fixed admin@lambdamail.local with a hardcoded
"SUPER_ADMIN (2FA)", claiming a second factor whether or not one existed.
- Settings seeded a "[Boletim]" Sieve rule. Saving posts the whole list, so
the first edit wrote that invented filter into the account's real script.
The reconcile endpoint itself answered {records_verified: 13, status:
"VERIFIED"} for any domain id, including one that does not exist, without
resolving a name. It now reports what it does, which is record the request.
Surfaces:
The root was a chooser listing webmail and the console side by side, which
asked visitors a question they should not have to answer and advertised cookie
names and audiences to anonymous readers. It now redirects into the mail
client. Accounts that may administer the server get a link to the console from
inside the app - a link to /admin/login, so crossing over still costs the
second factor the admin audience requires - and the console gets a plain link
back, since the webmail session was never given up to get there.
Enrolment:
Both enrolment screens printed the base32 secret as text and left the operator
to type 32 characters into their phone. The enrol endpoint already returned an
otpauth:// URI; it simply was not drawn. Added a shared component that renders
it as a QR locally - the seed is already in the page, and sending it to an
image service would put it in another request log for nothing.
The recovery-code step rendered its own "sign in" button while the form's
submit button stayed visible below it: two identical buttons, and no way to
copy the codes it insisted you save. It is now terminal, with copy and
continue.
Language:
translate() had no interpolation, so "Undo Send ({seconds}s remaining)" showed
the placeholder and a second hardcoded countdown was appended after it. It now
substitutes, leaving an unmatched token visible rather than blanking it.
The pt-BR bundle had lost its diacritics - "Destinatario", "Ultimo erro",
"Acoes" - from the ASCII-source rule being applied to the translations, which
are data. Restored, and the three bundles are back in key parity at 270 each,
with roughly 120 strings that were hardcoded in the source now keyed.
Healthchecks:
web had none, despite being the only service users reach directly: a wedged
Next process kept its container running and Traefik kept routing to it. Added,
using node's own fetch since the image ships no curl. rspamd and clamav gained
the timeouts and start_periods whose absence would fail them during startup.
migrate stays without one and says why: it is a one-shot job, and a probe
would report unhealthy exactly when it has succeeded.
Verified: 36 webmail tests and 41 auth tests against a real Postgres, both new
admin/me cases confirmed to fail without the route (404). lang-lint clean,
production build clean, 0 vulnerabilities, compose validates.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f7e93275d5
commit
ee240ae227
29 files changed
+2201
-1221
No files matched your search
@@ -1,148 +1,286 @@
|
||||
{
|
||||
"common": {
|
||||
"appName": "LambdaMail",
|
||||
"userPortal": "Webmail",
|
||||
"adminPortal": "Console de Gestão",
|
||||
"loading": "Carregando...",
|
||||
"save": "Salvar Alterações",
|
||||
"cancel": "Cancelar",
|
||||
"delete": "Excluir",
|
||||
"confirm": "Confirmar",
|
||||
"search": "Buscar",
|
||||
"status": "Status",
|
||||
"actions": "Ações",
|
||||
"refresh": "Atualizar",
|
||||
"logout": "Sair"
|
||||
"admin": {
|
||||
"addAlias": "Adicionar apelido",
|
||||
"aliasesTitle": "Apelidos",
|
||||
"auditLog": "Trilha de auditoria",
|
||||
"backToWebmail": "Voltar ao webmail",
|
||||
"cancelJob": "Cancelar",
|
||||
"certificateState": "Certificado",
|
||||
"checksPassed": "{passed} de {total} aprovadas",
|
||||
"createAccount": "Criar conta",
|
||||
"createAlias": "Criar um apelido de roteamento",
|
||||
"csvPreview": "Pré-visualizar",
|
||||
"dashboardSubtitle": "Números ao vivo lidos do banco de dados.",
|
||||
"dashboardTitle": "Visão geral",
|
||||
"dkimAlgorithm": "Tipo de chave",
|
||||
"dkimOverlap": "As duas chaves assinam as mensagens enviadas por {days} dias, para nada falhar enquanto o DNS propaga.",
|
||||
"dkimPublishRecord": "Publique este registro no DNS:",
|
||||
"dkimRotate": "Gerar uma nova chave",
|
||||
"dkimSelector": "Seletor",
|
||||
"dkimTitle": "Rotação de chave DKIM",
|
||||
"dmarcSubtitle": "Detalhamento dos relatórios XML agregados que foram processados.",
|
||||
"dmarcTitle": "Relatórios DMARC",
|
||||
"dnsRecordsFor": "Registros DNS de {domain}",
|
||||
"dnsStatusDrift": "Divergente",
|
||||
"dnsStatusPartial": "Parcial",
|
||||
"dnsStatusVerified": "Verificado",
|
||||
"domainName": "Nome do domínio",
|
||||
"domainsTitle": "Domínios",
|
||||
"expiresInDays": "Expira em {days} dias",
|
||||
"freezeDomain": "Congelar domínio",
|
||||
"greylistScore": "Pontuação de greylist",
|
||||
"headerScore": "Pontuação de marcação de cabeçalho",
|
||||
"jobCancelled": "O trabalho {id} foi cancelado.",
|
||||
"jobRetried": "O trabalho {id} foi recolocado na fila para nova tentativa.",
|
||||
"lastChecked": "Última verificação: {when}",
|
||||
"lastReload": "Última recarga",
|
||||
"mailHost": "Host de e-mail",
|
||||
"mailboxCount": "{count} caixas de e-mail",
|
||||
"mailboxesSubtitle": "Contas, apelidos, importação CSV e a política de segundo fator.",
|
||||
"mailboxesTitle": "Caixas de e-mail",
|
||||
"mfaAdmins": "Obrigatório para administradores",
|
||||
"mfaEveryone": "Obrigatório para todos",
|
||||
"mfaOptional": "Opcional",
|
||||
"mfaPolicyIntro": "Escolha com que rigor este domínio exige um segundo fator.",
|
||||
"mfaPolicyTitle": "Exigência de segundo fator",
|
||||
"noCertificate": "Nenhum certificado carregado para este host.",
|
||||
"noChecks": "Nenhuma verificação relatada.",
|
||||
"noDomains": "Nenhum domínio foi cadastrado ainda.",
|
||||
"onboardIntro": "Cria o domínio e os apelidos padrão da RFC 2142, apontados para o seu endereço.",
|
||||
"onboardTitle": "Adicionar um domínio",
|
||||
"openAdmin": "Console de administração",
|
||||
"preflightTitle": "Verificações de prontidão",
|
||||
"queueEmpty": "A fila de saída está vazia.",
|
||||
"queueSubtitle": "Inspecione a fila de saída, tente reenviar um trabalho ou cancele um.",
|
||||
"queueTitle": "Fila de saída",
|
||||
"readinessIntro": "Verificações que o servidor relata sobre si mesmo antes de transportar mensagens em produção.",
|
||||
"reconcileDns": "Reconciliar DNS",
|
||||
"reconcileNotImplemented": "A verificação de registros DNS individuais ainda não foi implementada: isto registra a solicitação e relê o status armazenado, não consulta um resolvedor.",
|
||||
"rejectScore": "Pontuação de rejeição",
|
||||
"retryJob": "Tentar novamente",
|
||||
"rspamdIntro": "Pontuações que acionam greylisting, marcação de cabeçalho e rejeição.",
|
||||
"rspamdSaved": "Limites salvos.",
|
||||
"saveThresholds": "Salvar limites",
|
||||
"securitySubtitle": "Verificações de prontidão, estado do TLS, limites de spam e a trilha de auditoria.",
|
||||
"securityTitle": "Segurança",
|
||||
"tabAudit": "Trilha de auditoria",
|
||||
"tabReadiness": "Prontidão",
|
||||
"tabRspamd": "Limites de spam",
|
||||
"tabTls": "TLS",
|
||||
"tlsMode": "Modo TLS",
|
||||
"tlsTitle": "Certificado e transporte",
|
||||
"traceNoResults": "Nenhum rastro encontrado para esse ID de fila.",
|
||||
"tracePlaceholder": "ID da fila",
|
||||
"traceTitle": "Rastrear uma mensagem",
|
||||
"unknownSni": "Requisições SNI desconhecidas",
|
||||
"watcherHealthy": "Monitor de certificado"
|
||||
},
|
||||
"auth": {
|
||||
"userLoginTitle": "Entrar no Webmail",
|
||||
"adminLoginTitle": "Entrar no Console Admin",
|
||||
"emailLabel": "Endereço de E-mail",
|
||||
"passwordLabel": "Senha",
|
||||
"signInButton": "Entrar",
|
||||
"totpCodeLabel": "Código do Autenticador (6 dígitos)",
|
||||
"verifyCodeButton": "Verificar Código",
|
||||
"adminLoginTitle": "Console de administração",
|
||||
"adminStepUpNote": "O console de administração pede o segundo fator novamente, mesmo você já estando conectado ao webmail.",
|
||||
"authFailed": "Falha na autenticação",
|
||||
"cantScanQr": "Não consegue escanear? Digite esta chave manualmente:",
|
||||
"emailLabel": "Endereço de e-mail",
|
||||
"enrolmentFailed": "Não foi possível iniciar a configuração do segundo fator",
|
||||
"enrolmentIntro": "O console de administração exige um segundo fator. Configure um agora para continuar.",
|
||||
"genericError": "Algo deu errado",
|
||||
"invalidCredentials": "E-mail ou senha inválidos",
|
||||
"mfaRequired": "Código de autenticação em dois fatores obrigatório"
|
||||
"mfaRequired": "Digite o código de seis dígitos do seu aplicativo autenticador.",
|
||||
"passwordLabel": "Senha",
|
||||
"qrCodeAlt": "Código QR para configurar a verificação em duas etapas",
|
||||
"scanQr": "Escaneie este código com o Google Authenticator, Aegis, Authy ou 1Password.",
|
||||
"signInButton": "Entrar",
|
||||
"signOutOfAdmin": "Sair da administração",
|
||||
"totpCodeLabel": "Código de autenticação",
|
||||
"userLoginTitle": "Entre na sua caixa de e-mail",
|
||||
"verificationFailed": "Falha na verificação",
|
||||
"verifyCodeButton": "Verificar código"
|
||||
},
|
||||
"mail": {
|
||||
"inbox": "Caixa de Entrada",
|
||||
"sent": "Enviados",
|
||||
"drafts": "Rascunhos",
|
||||
"trash": "Lixeira",
|
||||
"junk": "Spam",
|
||||
"archive": "Arquivo",
|
||||
"compose": "Escrever E-mail",
|
||||
"noMessages": "Nenhuma mensagem nesta pasta",
|
||||
"unreadCount": "{count, plural, =0 {Nenhuma mensagem não lida} one {# mensagem não lida} other {# mensagens não lidas}}",
|
||||
"loadImages": "Carregar Imagens Remotas",
|
||||
"reply": "Responder",
|
||||
"forward": "Encaminhar",
|
||||
"undoSend": "Desfazer Envio ({seconds}s restantes)"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Configurações da Conta",
|
||||
"security": "Segurança e 2FA",
|
||||
"appPasswords": "Senhas de Aplicativo",
|
||||
"sessions": "Sessões Ativas",
|
||||
"mfaStatus": "Status da Autenticação em Dois Fatores",
|
||||
"mfaEnabled": "2FA está Ativo",
|
||||
"mfaDisabled": "2FA está Desativado",
|
||||
"enableMfa": "Ativar 2FA",
|
||||
"generateAppPassword": "Gerar Senha de Aplicativo",
|
||||
"recoveryCodesTitle": "Códigos de Recuperação",
|
||||
"saveRecoveryCodes": "Guarde estes códigos de recuperação em local seguro. Eles não serão exibidos novamente.",
|
||||
"language": "Idioma",
|
||||
"signOut": "Sair",
|
||||
"langEn": "Inglês",
|
||||
"langPtBR": "Português (Brasil)",
|
||||
"langEs": "Espanhol"
|
||||
},
|
||||
"admin": {
|
||||
"dashboardTitle": "Painel do Sistema",
|
||||
"domainsTitle": "Domínios e DNS (13 Registros)",
|
||||
"mailboxesTitle": "Caixas Postais e Contas",
|
||||
"aliasesTitle": "Aliases e Roteamento",
|
||||
"queueTitle": "Fila de Entrega de Saída",
|
||||
"dmarcTitle": "Análise DMARC",
|
||||
"securityTitle": "Segurança e Log de Auditoria",
|
||||
"preflightTitle": "Diagnóstico Preflight",
|
||||
"reconcileDns": "Reconciliar Registros DNS",
|
||||
"dnsStatusVerified": "VERIFICADO",
|
||||
"dnsStatusDrift": "DESVIO DETECTADO",
|
||||
"dnsStatusPartial": "PARCIAL",
|
||||
"retryJob": "Tentar Entrega Novamente",
|
||||
"cancelJob": "Cancelar Trabalho",
|
||||
"freezeDomain": "Congelar Destino"
|
||||
"common": {
|
||||
"actions": "Ações",
|
||||
"add": "Adicionar",
|
||||
"adminPortal": "Administração",
|
||||
"appName": "LambdaMail",
|
||||
"back": "Voltar",
|
||||
"cancel": "Cancelar",
|
||||
"confirm": "Confirmar",
|
||||
"continue": "Continuar",
|
||||
"copied": "Copiado",
|
||||
"copy": "Copiar",
|
||||
"delete": "Excluir",
|
||||
"loading": "Carregando...",
|
||||
"logout": "Sair",
|
||||
"never": "Nunca",
|
||||
"none": "Nenhum",
|
||||
"refresh": "Atualizar",
|
||||
"retry": "Tentar novamente",
|
||||
"save": "Salvar",
|
||||
"search": "Buscar",
|
||||
"status": "Status",
|
||||
"unavailable": "Indisponível",
|
||||
"userPortal": "Webmail"
|
||||
},
|
||||
"errors": {
|
||||
"unauthorized": "Sessão expirada ou não autorizada",
|
||||
"forbidden": "Acesso proibido para esta superfície de conta",
|
||||
"serverError": "Ocorreu um erro interno no servidor"
|
||||
"forbidden": "Você não tem acesso a isto",
|
||||
"loadFailed": "Não foi possível carregar os dados",
|
||||
"serverError": "Algo deu errado no servidor",
|
||||
"unauthorized": "Entre novamente"
|
||||
},
|
||||
"mail": {
|
||||
"addFiles": "Adicionar arquivos...",
|
||||
"allMessages": "Todas",
|
||||
"archive": "Arquivo",
|
||||
"attachments": "Anexos ({count})",
|
||||
"attachmentsFilter": "Com anexos",
|
||||
"attachmentsUnsupported": "Anexos são listados apenas pelo nome; o envio de arquivos ainda não está implementado.",
|
||||
"backToList": "Voltar para a lista de mensagens",
|
||||
"bold": "Negrito",
|
||||
"bulletList": "Lista com marcadores",
|
||||
"compose": "Escrever",
|
||||
"discard": "Descartar",
|
||||
"draftSaved": "Rascunho salvo automaticamente",
|
||||
"drafts": "Rascunhos",
|
||||
"forward": "Encaminhar",
|
||||
"hideCcBcc": "- Ocultar Cc/Cco",
|
||||
"inbox": "Caixa de entrada",
|
||||
"insertLink": "Inserir link",
|
||||
"insertUrl": "Digite a URL:",
|
||||
"italic": "Itálico",
|
||||
"junk": "Spam",
|
||||
"loadImages": "Carregar imagens",
|
||||
"noMessages": "Nenhuma mensagem",
|
||||
"numberedList": "Lista numerada",
|
||||
"reply": "Responder",
|
||||
"sendMessage": "Enviar mensagem",
|
||||
"sending": "Enviando...",
|
||||
"sent": "Enviados",
|
||||
"showCcBcc": "+ Adicionar Cc/Cco",
|
||||
"strikethrough": "Tachado",
|
||||
"trash": "Lixeira",
|
||||
"underline": "Sublinhado",
|
||||
"undoSend": "Enviando em {seconds}s",
|
||||
"undoSendAction": "Desfazer",
|
||||
"unreadCount": "{count} não lidas",
|
||||
"unreadFilter": "Não lidas"
|
||||
},
|
||||
"settings": {
|
||||
"actionDiscard": "Descartar",
|
||||
"actionFlag": "Marcar mensagem",
|
||||
"actionMove": "Mover para o Arquivo",
|
||||
"addRule": "Adicionar regra",
|
||||
"appPasswordPlaceholder": "Thunderbird / Outlook Mobile",
|
||||
"appPasswords": "Senhas de aplicativo",
|
||||
"autoReplySaveFailed": "Não foi possível salvar a resposta automática",
|
||||
"enableMfa": "Ativar verificação em duas etapas",
|
||||
"fieldFrom": "De",
|
||||
"fieldHeader": "Cabeçalho",
|
||||
"fieldSubject": "Assunto",
|
||||
"generateAppPassword": "Gerar",
|
||||
"langEn": "English",
|
||||
"langEs": "Español",
|
||||
"langPtBR": "Português (Brasil)",
|
||||
"language": "Idioma",
|
||||
"matchContains": "contém",
|
||||
"matchEquals": "é exatamente",
|
||||
"matchRegex": "corresponde à regex",
|
||||
"mfaDisabled": "Desativada",
|
||||
"mfaEnabled": "Ativada",
|
||||
"mfaStatus": "Status da verificação em duas etapas",
|
||||
"recoveryCodesTitle": "Códigos de recuperação",
|
||||
"ruleIf": "SE",
|
||||
"ruleThen": "ENTÃO",
|
||||
"saveAutoReply": "Salvar resposta automática",
|
||||
"saveRecoveryCodes": "Guarde-os em local seguro. Cada um funciona uma única vez e eles só aparecem agora.",
|
||||
"security": "Segurança",
|
||||
"sessions": "Sessões",
|
||||
"settingsSaved": "Configurações salvas.",
|
||||
"sieveIntro": "Regras que organizam as mensagens recebidas automaticamente.",
|
||||
"sieveTitle": "Filtros (Sieve)",
|
||||
"signOut": "Sair",
|
||||
"signatureIntro": "Anexada automaticamente às mensagens que você escreve.",
|
||||
"signaturePlaceholder": "Atenciosamente,\nSeu nome\nSeu cargo",
|
||||
"signatureSaveFailed": "Não foi possível salvar a assinatura",
|
||||
"signatureSaved": "Assinatura salva.",
|
||||
"signatureTitle": "Assinatura de e-mail",
|
||||
"sixDigitCode": "Código de seis dígitos",
|
||||
"subtitle": "Verificação em duas etapas, filtros, resposta automática e sua assinatura.",
|
||||
"title": "Configurações",
|
||||
"twoFactorIntro": "Proteja sua conta com o Google Authenticator, Aegis, Authy ou 1Password.",
|
||||
"vacationBodyLabel": "Mensagem da resposta",
|
||||
"vacationDefaultBody": "Obrigado pela sua mensagem. Estou ausente no momento e responderei assim que retornar.",
|
||||
"vacationDefaultSubject": "Fora do escritório",
|
||||
"vacationIntro": "Responde automaticamente às mensagens recebidas enquanto você estiver ausente.",
|
||||
"vacationSubjectLabel": "Assunto da resposta",
|
||||
"vacationTitle": "Resposta automática de ausência",
|
||||
"valuePlaceholder": "Valor a corresponder..."
|
||||
},
|
||||
"ui": {
|
||||
"accountStatus": "Situacao da conta",
|
||||
"actions": "Acoes",
|
||||
"active": "ATIVA",
|
||||
"activeSessions": "Sessoes ativas do webmail",
|
||||
"actor": "Autor / conta",
|
||||
"actualRecord": "Registro DNS atual (Cloudflare)",
|
||||
"allChecksPassed": "TODAS AS CHECAGENS PASSARAM",
|
||||
"appPasswordGenerated": "Senha de aplicativo gerada:",
|
||||
"appPasswordsSection": "Senhas de aplicativo (clientes IMAP / SMTP)",
|
||||
"accountStatus": "Status da conta",
|
||||
"actions": "Ações",
|
||||
"active": "Ativo",
|
||||
"activeSessions": "Sessões ativas",
|
||||
"actor": "Autor",
|
||||
"actualRecord": "Valor atual",
|
||||
"allChecksPassed": "Todas as verificações passaram",
|
||||
"appPasswordGenerated": "Senha de aplicativo gerada",
|
||||
"appPasswordsSection": "Senhas de aplicativo",
|
||||
"attempts": "Tentativas",
|
||||
"bounceRate": "Taxa de devolução",
|
||||
"changePassword": "Alterar senha",
|
||||
"clientIp": "IP do cliente",
|
||||
"copyPasswordNow": "Copie esta senha agora. Ela nao sera exibida novamente.",
|
||||
"coreInfra": "Estado da infraestrutura",
|
||||
"currentSession": "Sessao atual deste navegador",
|
||||
"daneVerified": "DANE / MTA-STS verificado",
|
||||
"copyPasswordNow": "Copie agora. Ela não será exibida novamente.",
|
||||
"coreInfra": "Serviços principais",
|
||||
"currentPassword": "Senha atual",
|
||||
"currentSession": "Este dispositivo",
|
||||
"daneVerified": "DANE verificado",
|
||||
"destination": "Destino",
|
||||
"diskUsed": "Uso de disco",
|
||||
"dkimResult": "Resultado DKIM",
|
||||
"dkimAlignment": "Alinhamento da assinatura DKIM",
|
||||
"dmarcEnforcement": "Aplicacao da politica DMARC",
|
||||
"domainVerification": "Estado da verificacao do dominio",
|
||||
"emailAddress": "Endereco de e-mail",
|
||||
"eventAction": "Acao registrada",
|
||||
"expectedValue": "Valor esperado pela especificacao",
|
||||
"healthy": "SAUDAVEL",
|
||||
"imapEngine": "Servidor IMAP (143/993)",
|
||||
"inboundVolume": "Volume de entrada (24h)",
|
||||
"jobId": "ID do trabalho",
|
||||
"lastError": "Ultimo erro",
|
||||
"liveMetrics": "Metricas operacionais do no de e-mail.",
|
||||
"localDisk": "Armazenamento em disco local",
|
||||
"preflightTitle": "Diagnostico de preflight do servidor",
|
||||
"messageBody": "Corpo da mensagem",
|
||||
"messageVolume": "Volume de mensagens",
|
||||
"noAppPasswords": "Nenhuma senha de aplicativo gerada ainda.",
|
||||
"online": "ONLINE",
|
||||
"outboundDelivered": "Entregues na saida (24h)",
|
||||
"queueDepth": "Profundidade da fila",
|
||||
"postgresRunner": "Executor de tarefas Postgres ativo",
|
||||
"provisionMailbox": "Criar nova caixa postal",
|
||||
"recipient": "Destinatario",
|
||||
"recordName": "Nome do registro",
|
||||
"reportingOrg": "Organizacao que reportou",
|
||||
"scanners": "Rspamd (antispam) e ClamAV",
|
||||
"diskUsed": "Armazenamento usado",
|
||||
"dkimAlignment": "Alinhamento DKIM",
|
||||
"dkimResult": "DKIM",
|
||||
"dmarcEnforcement": "Política DMARC",
|
||||
"domainVerification": "Verificação de domínio",
|
||||
"domainsVerified": "Domínios verificados",
|
||||
"emailAddress": "Endereço de e-mail",
|
||||
"eventAction": "Ação",
|
||||
"expectedValue": "Valor esperado",
|
||||
"healthy": "Saudável",
|
||||
"imapEngine": "Serviço IMAP",
|
||||
"inboundVolume": "Recebidas (24h)",
|
||||
"jobId": "Trabalho",
|
||||
"lastError": "Último erro",
|
||||
"liveMetrics": "Métricas ao vivo",
|
||||
"localDisk": "Disco local",
|
||||
"mailboxesActive": "Caixas ativas",
|
||||
"messageBody": "Mensagem",
|
||||
"messageVolume": "Mensagens",
|
||||
"newPassword": "Nova senha",
|
||||
"noAppPasswords": "Nenhuma senha de aplicativo ainda.",
|
||||
"noData": "Ainda sem dados",
|
||||
"online": "Online",
|
||||
"outboundDelivered": "Enviadas (24h)",
|
||||
"passwordChanged": "Senha alterada.",
|
||||
"postgresRunner": "Fila baseada em Postgres",
|
||||
"preflightTitle": "Prontidão",
|
||||
"provisionMailbox": "Criar caixa de e-mail",
|
||||
"queueDepth": "Tamanho da fila",
|
||||
"recipient": "Destinatário",
|
||||
"recordName": "Registro",
|
||||
"reportingOrg": "Organização que reportou",
|
||||
"scanners": "Análise de spam e vírus",
|
||||
"sender": "Remetente",
|
||||
"smtpListener": "Servidor SMTP (25/587/465)",
|
||||
"signOutOthers": "Sair dos outros dispositivos",
|
||||
"smtpListener": "Serviço SMTP",
|
||||
"sourceIp": "IP de origem",
|
||||
"spfRatio": "Taxa de alinhamento SPF",
|
||||
"spfResult": "Resultado SPF",
|
||||
"spfRatio": "Taxa de aprovação SPF",
|
||||
"spfResult": "SPF",
|
||||
"storageQuota": "Cota de armazenamento",
|
||||
"subject": "Assunto",
|
||||
"targetObject": "Objeto alvo",
|
||||
"timestamp": "Data e hora",
|
||||
"toRecipients": "Para (destinatarios)",
|
||||
"totalEvaluated": "Total de mensagens avaliadas",
|
||||
"twoFactorSection": "Autenticacao em dois fatores (TOTP RFC 6238)",
|
||||
"watching": "OBSERVANDO",
|
||||
"passwordChanged": "Senha alterada",
|
||||
"signOutOthers": "Encerrar as outras sessoes",
|
||||
"changePassword": "Alterar senha",
|
||||
"currentPassword": "Senha atual",
|
||||
"newPassword": "Nova senha (min. 12 caracteres)",
|
||||
"toggleMenu": "Abrir ou fechar o menu"
|
||||
"targetObject": "Alvo",
|
||||
"timestamp": "Horário",
|
||||
"toRecipients": "Para",
|
||||
"toggleMenu": "Alternar menu",
|
||||
"totalEvaluated": "Mensagens avaliadas",
|
||||
"twoFactorSection": "Verificação em duas etapas",
|
||||
"watching": "Monitorando"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user