Mensagem de erro
dkim=fail reason="key not found in DNS"
Também aparece como
- dkim=neutral (no key)
A classificação varia conforme o verificador (`fail` no OpenDKIM, `neutral (no key)` no mailauth — os dois reproduzidos), e por isso a mesma mensagem pode aparecer de forma diferente nos cabeçalhos do seu próprio servidor e nos grandes provedores de e-mail; os cabeçalhos do Gmail costumam trazer `dkim=neutral (no key for signature)`, um texto do serviço em produção que não pode ser reproduzido em um contêiner. Se a consulta DNS expirar, em vez de o registro não existir, o resultado é `dkim=temperror`.
O que significa
A mensagem traz uma assinatura DKIM para o seletor `s=` e o domínio `d=`, mas o registro TXT `<selector>._domainkey.<domain>` não existe, então o receptor não tem como verificar nada. O OpenDKIM registra isso como `dkim=fail` com este motivo; outros verificadores classificam a mesma situação de outra forma — o mailauth como `dkim=neutral (no key)`, alguns como `dkim=permerror`. Para o DMARC, nenhum desses resultados conta como aprovação no DKIM.
Por que acontece
O registro do seletor nunca foi criado
comumUma nova chave de assinatura (ou um novo provedor de e-mail) começou a assinar com um seletor antes de o registro TXT correspondente ser adicionado. Provedores de envio de e-mail (ESPs) como o Google Workspace, o Microsoft 365 ou o SendGrid só começam a assinar corretamente quando os registros deles já existem.
O registro existe com um nome ligeiramente diferente
comumPainéis de DNS que acrescentam o nome da zona geram `s2026._domainkey.example.com.example.com`; um registro criado na zona pai quando o subdomínio está delegado a outros servidores DNS também não é encontrado.
Destino do CNAME quebrado ou registro dividido incorretamente
ocasionalCom provedores que apontam CNAMEs para os próprios registros de chave (`s1._domainkey → s1.domainkey.u123.wl.sendgrid.net`), a consulta falha se o CNAME não existir ou apontar para um destino removido.
A chave foi removida enquanto ainda havia mensagens que a usavam
ocasionalRemover o seletor antigo logo após a rotação da chave quebra mensagens que ainda estão em filas ou que são verificadas de novo mais tarde (encaminhamento, ARC).
Como corrigir
- 1.
Consultar o nome exato do registro
Monte o nome a partir de `s=` e `d=` do cabeçalho da assinatura e consulte-o de fora da sua rede.
bash # s= and d= from the DKIM-Signature header name the record: <s>._domainkey.<d> dig +short TXT s2026._domainkey.example.com dig +short TXT s2026._domainkey.example.com @1.1.1.1 # bypass local caches - 2.
Publicar a chave e manter os seletores antigos por um tempo
Publique o novo seletor antes de assinar com ele e mantenha o anterior por alguns dias depois da troca.
text ; zone example.com - long keys are split into several quoted strings of at most 255 characters s2026._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." )
Erros relacionados
dkim=fail reason="signature verification failed"OpenDKIM (Authentication-Results header added by the opendkim milter); mailauth reports the same as "bad signature"dkim=permerrorOpenDKIM (Authentication-Results); mailauth reports syntax errors as dkim=neutraldkim=fail (body hash did not verify)DKIM verifiers (Gmail, mailauth, Rspamd…)