Parada 4 de 7 · Leia a mensagem

Como ler o cabeçalho de um e-mail

Ache o Authentication-Results, compare os três domínios que o DMARC olha e reconstrua o caminho da mensagem pelos Received.

Todo servidor que recebe uma mensagem escreve nela o que achou. O SPF passou? A assinatura confere? O DMARC aprovou? Está tudo no cabeçalho, escondido atrás de um clique que pouca gente conhece.

É a única prova do que aconteceu com uma mensagem de verdade. O DNS mostra a intenção; o cabeçalho mostra o resultado.

Achando o cabeçalho completo

No Gmail: abra a mensagem, menu de três pontos, Mostrar original. No Thunderbird, Ctrl+U. Outlook, Apple Mail e companhia têm algo como "ver código-fonte" ou "exibir cabeçalhos", que muda de lugar a cada versão.

Teste com uma conta sua, mandando direto do sistema que você quer avaliar. Mensagem encaminhada por um colega não serve. Ela passou por mais um servidor e chega com outro resultado.

Lendo de baixo para cima

Cada servidor acrescenta linhas no topo, então o cabeçalho é uma pilha: o último Received da lista é o mais perto de quem enviou, e o primeiro é a chegada ao seu provedor. A RFC 5321 define esses carimbos de passagem; o formato dos campos está na RFC 5322.

Um campo pode continuar na linha seguinte, que começa com espaço. Copie do jeito que está.

No meio de dezenas de linhas, cinco interessam para autenticação:

  • From, o remetente que a pessoa vê. É o domínio que o DMARC protege.
  • Return-Path, o endereço do envelope, gravado na entrega. Costuma ser o domínio que o SPF avaliou e para onde voltam as devoluções.
  • DKIM-Signature, a assinatura. d= é quem assinou, s= é o seletor da chave.
  • Received, uma linha por servidor no caminho, com horário.
  • Authentication-Results, o veredito.

O veredito

O Authentication-Results (RFC 8601) começa com o nome do servidor que fez as verificações e traz um resultado por mecanismo. Num exemplo fictício:

Authentication-Results: mx.destino.example;
  dkim=pass header.d=exemplo.com.br header.s=s1;
  spf=pass smtp.mailfrom=retorno.exemplo.com.br;
  dmarc=pass header.from=exemplo.com.br

Três pass, três perguntas. spf=pass: o servidor que entregou estava autorizado para retorno.exemplo.com.br. dkim=pass: a assinatura de exemplo.com.br confere. dmarc=pass: pelo menos um dos dois estava alinhado com o From.

Além de pass, aparecem none (não havia o que avaliar), neutral, softfail, fail, temperror e permerror. Erro temporário costuma se resolver sozinho. Erro permanente quase sempre é registro duplicado ou malformado, e esse não se resolve sozinho nunca.

Os três domínios

É aqui que a maioria das falhas de DMARC se explica. Escreva lado a lado:

  1. o domínio do From, em header.from;
  2. o domínio do SPF, em smtp.mailfrom ou no Return-Path;
  3. o domínio de cada assinatura, em header.d ou no d=.

Se o segundo e o terceiro forem do provedor, algo como bounces.provedor.example, o SPF e o DKIM podem passar e o DMARC falhar mesmo assim. O conserto não está no DMARC. Está em configurar o domínio de retorno e a assinatura com o seu domínio, recurso que todo provedor sério oferece, quase sempre numa tela chamada "autenticação de domínio".

No modo relaxado, que é o padrão, retorno.exemplo.com.br alinha com exemplo.com.br. No estrito, só nome idêntico. As regras estão na RFC 9989.

Nem todo Authentication-Results é de verdade

Qualquer um pode escrever Authentication-Results: dmarc=pass no próprio cabeçalho antes de enviar. Vale o que o seu provedor gravou, que normalmente é o primeiro da pilha e traz o nome dele. A RFC 8601 manda os servidores apagarem ou ignorarem campos que usem o nome deles indevidamente. Os que vêm com outros nomes continuam lá e não significam nada.

Mensagem que passou por lista de discussão ou encaminhamento pode trazer ARC-Authentication-Results (RFC 8617), o registro de como ela estava antes de ser alterada no caminho. Se o destino confia nessa cadeia, isso é decisão dele.

Mandando para o suporte

Cabeçalho tem endereços, nomes de servidores e às vezes IPs. Mande completo para quem vai analisar, por um canal decente, e deixe o corpo de fora se tiver dado pessoal. Só não troque os domínios por "xxx": sem eles, ninguém investiga nada.

Para uma primeira olhada, o leitor de cabeçalhos separa esses campos no seu navegador, sem mandar o texto para lugar nenhum, e leva o seletor DKIM direto para a consulta da chave no DNS.

Fontes e referências

Documentação consultada na revisão. Regras e interfaces de terceiros podem mudar.

Próxima parada · EnvioIntegrar e-mail transacional sem mandar aviso duplicado