Visualizador de E-mail EML
Visualiza e analisa o conteúdo de arquivos EML.
Visão geral
Um arquivo .eml é uma mensagem salva no mesmo formato em que ela viajou:
cabeçalhos, uma linha em branco e então o corpo. O cliente de e-mail esconde
quase tudo isso, o que não é problema até o momento em que você precisa saber o
que a mensagem realmente continha — um cabeçalho que o seu cliente não exibe, um
assunto que chegou embaralhado, ou a estrutura de uma mensagem que é renderizada
de forma errada.
Este visualizador corta o arquivo na fronteira dos cabeçalhos, desdobra as linhas de continuação, decodifica os encoded-words MIME no conjunto de caracteres declarado e mostra tanto os campos principais quanto o corpo bruto.
Como usar
- Salve a mensagem como
.emlou copie o código-fonte bruto dela. No Thunderbird, arraste a mensagem para a área de trabalho; no Apple Mail, Visualizar → Mensagem → Código-fonte bruto; no Outlook, Salvar como → Formato de Mensagem do Outlook e depois exporte, ou use Arquivo → Salvar como → Texto. - Cole o conteúdo. Cabeçalhos primeiro, depois uma linha em branco, depois o corpo — o formato é só isso.
- Leia os campos do resumo e então percorra o corpo bruto para entender a estrutura.
Encoded-words e por que os assuntos chegam quebrados
Por especificação, cabeçalhos são apenas ASCII. Texto não-ASCII é transportado
como um encoded-word: =?charset?encoding?data?=, em que a codificação é B
para base64 ou Q para uma variante de quoted-printable.
O conjunto de caracteres que fica no meio é o que importa, e é justamente ali que
a maioria das ferramentas erra. Assuntos em japonês continuam sendo enviados
rotineiramente como ISO-2022-JP — uma codificação baseada em sequências de
escape, anterior ao Unicode, que segue sendo o padrão em vários clientes de
e-mail. O e-mail da Europa Ocidental ainda usa ISO-8859-1 e windows-1252. Um
decodificador que presume UTF-8 transforma tudo isso em caracteres embaralhados,
e o resultado passa a impressão de arquivo corrompido em vez de erro de
decodificação.
Este visualizador lê o charset declarado e decodifica de acordo, de modo que
=?ISO-2022-JP?B?…?= se torna japonês legível e =?windows-1252?Q?it=92s?= se
torna it's com o apóstrofo tipográfico correto. Um charset desconhecido ou
escrito errado cai para UTF-8 em vez de falhar.
Dobramento de cabeçalhos
Cabeçalhos longos são quebrados em várias linhas, e as linhas de continuação
começam com espaço em branco. Um cabeçalho Received ou uma lista To com vinte
endereços vai ocupar muitas linhas no arquivo, e essa quebra não carrega
significado nenhum — é uma regra de transporte, não parte do valor.
Os cabeçalhos são desdobrados antes da análise, então um valor quebrado é lido
como uma única string. Vale saber disso quando você mesmo estiver lendo o texto
bruto: um grep por um valor de cabeçalho vai deixar passar qualquer coisa que
tenha calhado de ser quebrada em duas linhas.
O que o corpo mostra
O corpo é exibido exatamente como aparece no arquivo, e isso é deliberado.
A maioria das mensagens reais é multipart/alternative (uma versão em texto puro
e uma versão em HTML do mesmo conteúdo) ou multipart/mixed (conteúdo mais
anexos). Cada parte tem o seu próprio Content-Type, o seu próprio charset e o
seu próprio Content-Transfer-Encoding, e as partes são separadas por uma string
de fronteira declarada nos cabeçalhos de nível superior.
Mostrar uma parte decodificada como se ela fosse «a mensagem» esconde essa estrutura, e normalmente a estrutura é exatamente o que você veio ver: qual parte um cliente está renderizando, se a alternativa em texto puro corresponde ao HTML, se um anexo está onde você espera. Por isso o corpo bruto continua bruto.
Isso significa, sim, que corpos em quoted-printable exibem =3D no lugar de =
e mostram quebras de linha suaves como um = no fim da linha, e que partes em
base64 aparecem como base64. Se você precisar decodificar uma dessas partes,
copie-a e use o decodificador Base64 ou o
decodificador de URL / percent-encoding sobre ela.
Cabeçalhos que o seu cliente não mostra
O resumo lista os sete campos que você costuma querer. O texto bruto que você colou contém o resto, e vários deles respondem perguntas que os clientes escondem.
Return-Pathé o remetente de envelope — para onde vão as devoluções. Ele é definido pelo servidor de envio e é muito frequentemente diferente do cabeçalhoFrom:, que é o endereço que uma pessoa vê. Quando o SPF passa mas o DMARC falha, essa divergência costuma ser o motivo.List-UnsubscribeeList-Unsubscribe-Postsão o que faz aparecer o botão de cancelamento de inscrição em um clique no Gmail. Mala direta sem eles é marcada como spam com mais frequência.Auto-Submittedmarca mensagens geradas por máquina. Ausente em uma mensagem automatizada, ele vai disparar respostas de ausência e laços de e-mail.In-Reply-ToeReferencessão como os clientes montam uma conversa. Uma resposta que aparece como conversa nova está sem um dos dois.Content-LanguageeAccept-Languageexplicam por que um remetente multilíngue escolheu a versão que escolheu.- Cabeçalhos
X-*são o que a infraestrutura de envio acrescentou. Pontuações de spam, identificadores de campanha e nomes internos de fila aparecem todos aqui, e são o caminho mais rápido para identificar qual sistema de fato enviou uma mensagem.
Exemplos
- Um assunto que chega como rabisco. Cole a mensagem aqui. Se o assunto estiver legível, o remetente está correto e é o cliente de recebimento que está tratando o charset mal.
- «A mensagem é renderizada de outro jeito no Outlook.» Olhe a estrutura de
fronteiras. Um
multipart/alternativeem que as duas partes divergem explica a maior parte desses relatos. - Um cabeçalho que falta. Clientes exibem um subconjunto curado.
List-Unsubscribe,Auto-Submitted,X-Failed-Recipientse afins estão no arquivo mesmo quando nada os mostra. - Confirmar o que você realmente enviou. Salve uma mensagem da sua própria pasta de itens enviados e leia-a de volta. Surpresas de codificação são muito mais fáceis de ver na forma bruta.
Observações
A separação entre cabeçalhos e corpo é a primeira linha em branco, conforme o formato. Um arquivo sem nenhuma linha em branco é tratado como só cabeçalhos, que é exatamente o que você quer quando alguém cola apenas o bloco de cabeçalhos.
Nada aqui valida a mensagem. Um .eml com um Date malformado, sem
Message-ID, ou com uma fronteira que nunca aparece no corpo, vai ser exibido
exatamente como está — porque o objetivo é ver o que o arquivo contém, e não o
que ele deveria conter.
Para o caminho de entrega, os atrasos por salto e os veredictos de SPF, DKIM e DMARC, use o analisador de cabeçalhos de e-mail. Ele lê os mesmos cabeçalhos com outra pergunta em mente.