Domínio de e-mail não verifica: diagnóstico por provedor de DNS
Registro DKIM ou SPF não verificado? Os 6 erros que travam o domínio, como achar cada um com dig e a correção na Cloudflare, Registro.br e outros.
Na prática7 min de leitura
Ver em MarkdownVocê copiou os registros do serviço de e-mail, colou no painel de DNS, esperou um dia e a tela continua com "pendente". O deploy está pronto, o e-mail de boas-vindas não sai e o suporte responde "aguarde a propagação". Na maioria das vezes, propagação não é o problema: é um dos seis erros abaixo, e dá para achar qual com dois comandos.
Primeiro: descubra quem responde pelo DNS do domínio#
Antes de mexer em qualquer registro, confirme que você está editando o painel certo. O DNS de um domínio é respondido pelos servidores de nomes (NS) configurados no registro do domínio. Criar registros em qualquer outro painel não muda nada.
dig +short NS exemplo.com.br
# ana.ns.cloudflare.com.
# bob.ns.cloudflare.com.| O NS termina em | Onde editar |
|---|---|
ns.cloudflare.com |
Cloudflare |
dns.br (servidores do Registro.br) |
Registro.br |
dns-parking.com ou hostinger |
Hostinger (hPanel) |
domaincontrol.com |
GoDaddy |
vercel-dns.com |
Vercel |
Esse é o erro de uma pergunta no Stack Overflow de 2024: o domínio estava registrado num lugar e o site hospedado na Vercel, e a pessoa criou os registros primeiro no painel do registrador, depois na Vercel, depois nos dois. Dois de três registros verificaram, o DKIM não. Com o dig NS no começo, a dúvida "onde coloco?" some.
Como conferir um registro com dig e nslookup#
Os comandos que respondem "o registro existe e tem o valor certo?":
dig +short TXT exemplo.com.br # SPF
dig +short TXT _dmarc.exemplo.com.br # DMARC
dig +short CNAME couryo1._domainkey.exemplo.com.br # DKIM por CNAME
dig +short CNAME bounces.exemplo.com.br # return pathnslookup -type=TXT _dmarc.exemplo.com.br
nslookup -type=CNAME couryo1._domainkey.exemplo.com.br
Resolve-DnsName -Type CNAME couryo1._domainkey.exemplo.com.brPara tirar o cache do caminho, pergunte direto ao servidor de nomes do domínio (o que apareceu no dig NS):
dig +short CNAME couryo1._domainkey.exemplo.com.br @ana.ns.cloudflare.comComo ler a resposta:
- Resposta vazia no servidor do domínio: o registro não existe com esse nome. É erro de nome ou de painel, não de propagação.
- Resposta certa no servidor do domínio e vazia no seu computador: é cache. Espere o TTL ou teste com outro resolvedor (
@1.1.1.1,@8.8.8.8). - Resposta com outro valor: erro de digitação ou registro antigo no mesmo nome.
Os 6 erros mais comuns#
1. Domínio repetido no campo de nome#
Quase todo painel completa o nome com o domínio sozinho. Se você cola o nome inteiro, o registro nasce em couryo1._domainkey.exemplo.com.br.exemplo.com.br.
Como achar: o dig no nome certo vem vazio; no nome duplicado, responde.
dig +short CNAME couryo1._domainkey.exemplo.com.br.exemplo.com.brCorreção: no campo de nome, escreva só a parte antes do domínio (couryo1._domainkey, _dmarc, bounces). Alguns painéis aceitam o nome completo com um ponto final (couryo1._domainkey.exemplo.com.br.), que marca o nome como absoluto; na dúvida, use só a parte curta.
2. CNAME com proxy na Cloudflare#
Com a nuvem laranja ligada, a Cloudflare responde com os IPs dela em vez do CNAME, e o DKIM e o return path deixam de apontar para o serviço de envio. A documentação da Cloudflare recomenda "DNS only" para registros de e-mail e de verificação de terceiros, e diz que só registros A, AAAA e CNAME podem passar pelo proxy.
Como achar: o dig CNAME volta vazio e o dig A no mesmo nome devolve IPs.
Correção: edite o registro e mude Proxy status para DNS only (nuvem cinza).
3. Dois registros SPF#
Dois TXT começando com v=spf1 no mesmo nome invalidam os dois: o resultado é permerror (RFC 7208, seção 4.5). Acontece quando a hospedagem ou o e-mail da empresa já criou um SPF e o serviço novo pede outro.
Foi o caso de uma discussão na comunidade da Vercel, em 2024: a verificação não passava por um conflito entre o SPF do serviço de encaminhamento de e-mail e o do serviço de envio, e se resolveu juntando os dois num registro só.
Como achar:
dig +short TXT exemplo.com.br | grep spf1Correção: um registro só, com todos os include e um all no fim:
v=spf1 include:_spf.google.com include:spf.outro-servico.com ~allO passo a passo para juntar está em Registro SPF na Hostinger, HostGator e Locaweb.
4. Propagação e TTL (inclusive o cache do "não existe")#
Propagação é o tempo que os resolvedores levam para esquecer a resposta antiga. Quanto vale isso depende do TTL do registro e do painel. Um detalhe que quase ninguém conhece: se o verificador consultou o nome antes de você criar o registro, a resposta "não existe" também fica em cache, pelo tempo definido no registro SOA da zona (RFC 2308).
dig SOA exemplo.com.br +noall +answer
# o "não existe" fica em cache pelo menor entre o TTL do SOA e o último número dele, em segundosCorreção: confira no servidor do domínio (com @). Se ali está certo, é só esperar. Se o painel deixa, baixe o TTL antes de uma mudança grande.
5. Registro na zona errada#
Variações do mesmo erro:
- o registro foi criado no registrador, mas o DNS é respondido por outro lugar (veja o
dig NSno começo); - o domínio tem um subdomínio com zona própria (por exemplo,
mail.exemplo.com.brdelegado para outro provedor) e o registro foi criado na zona do domínio principal, ou o contrário; - o registro foi criado em outro domínio da conta, parecido (
exemplo.comem vez deexemplo.com.br).
Como achar: dig +short NS mail.exemplo.com.br mostra se o subdomínio tem servidores de nomes próprios.
6. Erro de digitação, espaço ou aspas#
- Espaço ou quebra de linha no começo ou no fim do valor, comum ao copiar de PDF ou planilha.
- Aspas duplicadas: alguns painéis põem as aspas do TXT sozinhos; colar
"v=DMARC1; ..."com aspas pode gerar"\"v=DMARC1...\"". - Chave DKIM cortada em TXT longos. Prefira os registros por CNAME quando o serviço oferecer.
- Letra trocada no seletor (
couryo1contracouyro1).
Como achar: compare caractere por caractere a saída do dig com o valor esperado. Muitos serviços mostram o valor encontrado ao lado do esperado; use isso.
Painel por painel#
| Painel | Onde fica | Campo de nome | Cuidado específico |
|---|---|---|---|
| Cloudflare | domínio > DNS > Records > Add record | só a parte curta; @ para o domínio principal |
nuvem cinza (DNS only) nos CNAMEs de e-mail |
| Registro.br | Domínios > domínio > Configurar endereçamento > Modo avançado; depois Nova entrada e Salvar alterações | só a parte curta; vazio para o domínio principal | só vale se o domínio usa os servidores do Registro.br; a troca para o modo avançado leva alguns minutos (passo a passo) |
| Hostinger (hPanel) | Domínios > domínio > DNS / Nameservers (ajuda) | @ para o principal, só o subdomínio nos outros |
a hospedagem costuma criar SPF e DMARC próprios: edite em vez de duplicar |
| GoDaddy | Domain Portfolio > domínio > DNS > Add New Record (ajuda) | @ ou só o prefixo, sem o domínio |
o nome não pode começar nem terminar com ponto |
| Vercel | Domains > domínio > formulário de DNS (documentação) | só o prefixo (bounces, não bounces.exemplo.com.br); vazio para o principal |
só funciona com os servidores de nomes da Vercel; o TTL padrão é 60 segundos |
A Vercel lembra, na própria documentação, que trocar os servidores de nomes não leva os registros antigos junto: copie o MX, o SPF, o DKIM e o DMARC antes de mudar o NS, ou o e-mail para de funcionar.
Do sintoma à causa#
| O que você vê | Causa mais provável |
|---|---|
tudo pendente, nada aparece no dig |
painel errado (o NS aponta para outro lugar) |
| só o DKIM e o return path pendentes, na Cloudflare | proxy ligado nos CNAMEs |
dig responde no nome com o domínio repetido |
domínio colado no campo de nome |
SPF "não verificado" ou spf=permerror |
dois registros SPF ou mais de 10 consultas |
| certo no servidor do domínio, vazio no seu computador | cache; espere o TTL |
| valor quase igual ao esperado | espaço, aspas ou letra trocada |
Onde o Couryo entra#
No Couryo, cada registro do domínio aparece com o próprio status: ok, pending (ainda não encontrado) ou wrong (encontrado com outro valor), e no wrong o campo found mostra o que está publicado, para comparar com o esperado. Domínios pendentes são conferidos de novo sozinhos a cada 10 minutos por 72 horas. Com a Cloudflare conectada (um token com permissão de editar o DNS da zona), os registros são criados na sua zona e verificados na hora, sem copiar e colar. O SPF fica no subdomínio de devolução, então o SPF do domínio principal não muda e o erro 3 não acontece. Veja Domínios e DNS.
Perguntas frequentes#
Quanto tempo a verificação de domínio leva?#
Com os registros certos no painel certo, de minutos a algumas horas. Na Cloudflare e na Vercel costuma ser questão de minutos. Se depois de um dia o dig no servidor do domínio ainda não mostra o registro, o problema não é propagação: confira o painel e o nome.
O registro aparece no dig, mas o serviço diz que não verificou. Por quê?#
Três motivos comuns: o verificador ainda tem em cache a resposta "não existe" (espere o tempo do SOA), o valor tem uma diferença pequena (espaço, aspas, letra) ou o registro é um CNAME com proxy na Cloudflare, que responde com IPs. Peça a verificação de novo depois de corrigir.
Posso ter dois registros DKIM no mesmo domínio?#
Pode, desde que tenham seletores diferentes (google._domainkey, couryo1._domainkey). Cada serviço usa o seu. O que não pode é dois SPF no mesmo nome ou dois DMARC.
Preciso apagar o SPF da hospedagem para usar outro serviço de envio?#
Não. Se o serviço novo pede um include no domínio principal, junte no SPF que já existe. Se ele usa um subdomínio de devolução (como bounces.), o SPF do domínio principal fica como está.
O que é o ponto final no nome do registro?#
Num nome de DNS, o ponto final indica que ele está completo (exemplo.com.br.). Sem o ponto, alguns painéis acrescentam o domínio no fim. Se o registro foi criado com o domínio repetido, apague e crie de novo só com a parte curta do nome.