Como ver o código-fonte de um e-mail
- Pegue a mensagem bruta no seu cliente de e-mail (veja a tabela abaixo) e cole, ou arraste o arquivo
.emlou.mhtpara a página. - O resumo mostra From, To, Cc, Subject, Date e Message-ID, decodificados. Todos os headers lista cada header com o valor decodificado e o bruto.
- Leia o Corpo da mensagem como texto simples ou HTML. O HTML aparece em sandbox.
- Anexos lista cada arquivo com nome, tipo, tamanho e content ID, um botão Baixar e uma prévia para imagens.
- Estrutura MIME mostra como as partes se aninham, o que ajuda quando um anexo parece estar faltando.
| Cliente de e-mail | Onde encontrar o código-fonte |
|---|---|
| Gmail | Menu da mensagem (⋮) → Mostrar original, depois Fazer o download do original |
| Outlook na web | Menu da mensagem (…) → Exibir → Exibir código-fonte da mensagem |
| Thunderbird | Exibir → Código-fonte da mensagem (Ctrl+U), ou Arquivo → Salvar como para um .eml |
| Apple Mail | Visualizar → Mensagem → Fonte Bruta |
O que o decodificador entende
- Headers codificados: encoded words da RFC 2047 em Base64 (
B) e quoted-printable (Q), palavras adjacentes unidas, qualquer charset que o navegador conheça, além de headers em UTF-8 bruto. - Nomes de anexos no formato da RFC 2231, como
filename*=UTF-8''Rechnung%20M%C3%A4rz.pdf, e continuações divididasfilename*0*=. - Corpos em
base64equoted-printable, decodificados com o charset declarado.f=C3=BCrvirafür. - Mensagens aninhadas: um e-mail encaminhado como anexo
message/rfc822é percorrido como o externo. - Imagens inline: referências
cid:no HTML são resolvidas para as imagens anexadas. - Entrada parcial: uma parte MIME Base64 avulsa, uma mensagem inteira codificada em Base64 ou um corpo multipart que começa em
--boundarysem headers.
Uma mensagem codificada em Base64 por inteiro geralmente começa com UmV0dXJuLVBhdGg6 (Return-Path:) ou UmVjZWl2ZWQ6 (Received:). Cole como está; o decodificador a desembrulha primeiro.
Como conferir uma mensagem suspeita
Os headers dizem mais sobre uma tentativa de phishing do que o corpo. Pontos para comparar em Todos os headers:
- From contra Return-Path e Reply-To. Um endereço de resposta em outro domínio é um sinal clássico.
- Authentication-Results, adicionado pelo servidor que recebeu a mensagem:
spf=,dkim=edmarc=com pass ou fail. - As linhas Received, lidas de baixo para cima, mostram o caminho do servidor de envio até o seu.
- Tipos de anexo: um anexo
.html,.isoou.zipde um remetente desconhecido merece desconfiança, assim como uma extensão dupla comoinvoice.pdf.html.
Como o conteúdo remoto é bloqueado, ver o corpo HTML aqui não carrega pixels de rastreamento nem confirma que o seu endereço é lido. O CSS da mensagem também é descartado, então newsletters ficam mais simples do que em um cliente de e-mail.
Como extrair anexos em Python
from email import policy
from email.parser import BytesParser
with open("message.eml", "rb") as f:
msg = BytesParser(policy=policy.default).parse(f)
print(msg["Subject"])
for part in msg.iter_attachments():
name = part.get_filename()
with open(name, "wb") as out:
out.write(part.get_payload(decode=True))
print("saved", name)
O policy.default decodifica headers com encoded words, então msg["Subject"] já sai legível. Em uso real, sanitize name antes de gravar, já que ele vem do remetente. Mais sobre como os anexos são codificados em Base64 em e-mail, e o codificador MIME Base64 gera o formato de 76 colunas.
Limitações conhecidas
- Arquivos
.msgdo Outlook não são suportados. Uma partewinmail.dat(TNEF) aparece como anexo, mas não é descompactada. - Links dentro do corpo HTML não fazem nada, de propósito.
- Mensagens com um número extremo de partes MIME são cortadas, com um aviso.
Perguntas frequentes
Como abrir um arquivo .eml sem o Outlook?
Arraste o arquivo para esta página. Os headers, os corpos de texto e HTML e todos os anexos aparecem, e os anexos podem ser baixados um a um. Arquivos de até 64 MB são lidos diretamente no navegador.
O que significa =?UTF-8?B?…?= na linha de assunto?
É uma encoded word da RFC 2047: B indica que o texto no meio está em Base64, Q indica uma variante de quoted-printable. =?UTF-8?B?UmVjaG51bmcgTcOkcno=?= decodifica para Rechnung März. O decodificador mostra o valor decodificado e o bruto lado a lado.
É seguro visualizar um e-mail suspeito aqui?
O corpo HTML é renderizado em um frame em sandbox, sem scripts, formulários ou links funcionando, e imagens remotas e pixels de rastreamento são bloqueados, então abrir o e-mail não informa nada ao remetente. Os anexos são listados e oferecidos para download, nunca abertos.
Ele abre arquivos .msg do Outlook?
Não. Um arquivo .msg é um formato binário do Outlook, não MIME. Abra a mesma mensagem no Outlook na web, escolha exibir o código-fonte da mensagem e cole esse texto aqui.