Você quer guardar uma newsletter nas suas notas, citar um aviso de fornecedor em um documento ou entregar uma conversa de email a um LLM como contexto. Seja qual for o motivo, ao abrir o código-fonte de um email HTML você encontra uma marcação suja de um jeito que páginas web comuns não são: tabelas de layout aninhadas em vários níveis, um atributo style em cada elemento e imagens de rastreamento invisíveis misturadas ao corpo. Este guia mostra, com medições, como o mesmo email é convertido de forma completamente diferente dependendo de onde você copia — e depois percorre a extração do HTML no Gmail, no Outlook e em arquivos .eml, além da limpeza final.
Decida o que precisa manter — isso escolhe a rota
Comece pelo resultado, não pela ferramenta. O que você quer manter determina o caminho mais curto.
- Só o corpo, de alguns emails abertos — a conversão no navegador é a rota mais curta. Copie o HTML do bloco de conteúdo e cole em HTML para Markdown. Grátis, sem cadastro, e nada do que você cola é enviado a lugar algum
- Cabeçalhos From / Subject / data, cadeias de respostas citadas ou a lista de anexos — ou dezenas de arquivos .eml — use uma CLI que leia .eml diretamente (a família eml2md, abaixo)
- Um pipeline de ingestão recorrente — use o módulo
emaildo Python para escolher a parte MIME correta e converta em seguida
Dois avisos antes de começar. Primeiro: conversores no navegador trabalham com texto HTML extraído, não com arquivos .eml. Um .eml é um contêiner MIME, não um documento HTML, então colá-lo não funciona. Segundo: a maioria dos emails é multipart/alternative e já traz uma versão text/plain ao lado da HTML — se o texto puro bastar, talvez você nem precise converter. Para escolher o formato ao alimentar um LLM, veja Markdown vs HTML para LLMs.
Medido: de onde você copia muda tudo
Construímos um email de amostra representativo com estrutura de newsletter (uma peça feita à mão, não estatísticas de envios reais) e o passamos pelo Turndown 7.2.4 com a configuração exata que o conversor do FormatArc usa. Medição feita em 2026-07-17; o script de reprodução, as amostras e os dados brutos estão no repositório, em scripts/benchmarks/html-email-to-markdown/. Todos os números abaixo vêm dessa execução.
Colar o código completo colapsa em uma tabela de 12 colunas
O código completo da amostra tem 6.491 bytes. Dentro dele: 8 elementos <table> (aninhados, todos de layout), 33 atributos style, 3 comentários condicionais MSO, um pixel de rastreamento de 1x1 e 4 links de redirecionamento para medir cliques.
Converta isso como está e a saída colapsa em uma tabela de 12 colunas (10 linhas contando o separador). As linhas de todas as tabelas aninhadas são achatadas em uma única tabela, então as mesmas frases aparecem duplicadas em várias células — inutilizável como tabela e inutilizável como texto. Além disso, o texto do <title> e os 380 bytes de CSS do bloco <style> vazam para o início da saída como texto puro.
O jeito específico como a tabela colapsa vem da regra própria do FormatArc, que reúne todas as linhas de uma <table> em uma única tabela de pipes. Funciona bem com uma tabela de dados normal e muito mal com tabelas de layout aninhadas. Mas seja qual for a ferramenta, converter um email completo com tabelas de layout dentro nunca termina bem.
Colar só o bloco de conteúdo gera 477 caracteres de Markdown limpo
Pegue o mesmo email e converta apenas o bloco de conteúdo (o HTML do elemento que envolve o corpo, 1.086 bytes) e o resultado vira. A saída são 477 caracteres de Markdown utilizável como está: o título vira #, parágrafos continuam parágrafos, links continuam links. Os 8 atributos style somem.
Uma coisa sobrevive: a URL de redirecionamento de rastreamento permanece como destino do link. Isso é tarefa de pós-processamento (abaixo). A conclusão é simples — não cole o código completo; cole o bloco de conteúdo.
Por que o HTML de email é tão sujo
O HTML de email difere do HTML web por razões concretas.
- O layout é feito com tabelas aninhadas porque os clientes de email suportam só uma fatia limitada de CSS. O Outlook clássico do Windows, por exemplo, renderiza email HTML com o motor HTML do Microsoft Word, como a Microsoft documenta oficialmenteAbre em uma nova aba — e a lista de propriedades sem suporte desse documento inclui
float,positionemax-width. Tabelas são a única ferramenta de layout que sobra - Comentários condicionais MSO (
<!--[if mso]>) servem marcação alternativa apenas ao Outlook. Conversores os tratam como comentários HTML, então desaparecem da saída - Como muitos clientes ignoram folhas de estilo externas, cada decisão visual vai embutida como atributo style no próprio elemento
- O rastreamento de abertura adiciona uma imagem de 1x1, e o rastreamento de cliques envolve cada link em uma URL de redirecionamento (algo como
https://click.…/track?dest=...)
Extraindo o HTML do seu cliente de email
Este passo decide se a conversão funciona. Cliente por cliente:
O jeito confiável: copiar o bloco de conteúdo com as ferramentas do desenvolvedor
Funciona no Gmail e em qualquer outro webmail, e corresponde ao caso "só o bloco de conteúdo" das nossas medições.
- Abra o email, clique com o botão direito no texto do corpo e escolha Inspecionar.
- Nas ferramentas do desenvolvedor, suba até o elemento que envolve todo o corpo (com todos os parágrafos e títulos dentro).
- Clique nele com o botão direito e escolha Copiar, depois Copiar outerHTML.
Você agora tem na área de transferência o HTML do corpo, decodificado e sem a interface da caixa de entrada ao redor.
A armadilha do "Mostrar original": quoted-printable
O "Mostrar original" do Gmail (e a exibição de código no Thunderbird) mostra a mensagem MIME inteira. A parte HTML costuma vir codificada como Content-Transfer-Encoding: quoted-printable, então copiá-la entrega HTML quebrado:
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
<td style=3D"padding:24px 32px 12px 32px; font-family:Arial, Helvetica, san=
s-serif;">
=3D é a forma codificada de =, e um = sozinho no fim da linha é uma quebra de linha suave que é emendada na decodificação. As regras da Seção 6.7 do RFC 2045Abre em uma nova aba vão além do =3D, então um localizar-e-substituir não restaura o HTML corretamente. A decodificação pertence ao nível da parte MIME — se você se vir no código bruto, mude para a rota CLI ou Python.
Outlook, Apple Mail, Thunderbird
- O Outlook clássico do Windows pode exibir o código da mensagem pelo menu de contexto, que abre HTML já decodificado em um editor. Copiar dali evita por completo o problema do quoted-printable
- O Apple Mail e o Thunderbird podem salvar qualquer mensagem como arquivo .eml (arraste para fora ou use salvar como). Como .eml é um contêiner MIME, entregá-lo à CLI da próxima seção é mais rápido e seguro do que caçar a parte HTML em um editor de texto
Convertendo com o FormatArc — no navegador, sem enviar nada
Com o HTML do bloco de conteúdo em mãos, a conversão são três passos.
- Abra HTML para Markdown.
- Cole o HTML copiado à esquerda.
- Pressione o botão de converter e o Markdown aparece à direita.


A conversão roda inteiramente no seu navegador como JavaScript; nada do que você cola é transmitido. Para emails que você não colocaria no servidor de terceiros — correspondência com clientes, avisos internos — essa é a diferença prática em relação aos conversores baseados em upload. O raciocínio está em conversores online são seguros?. Para a operação básica da ferramenta e a tabela de equivalências de HTML para Markdown, veja o guia de HTML para Markdown; para os padrões gerais de limpeza ao colar do Word ou de páginas web, veja colar HTML como Markdown. Este artigo foca no que é específico de email.
Checklist de limpeza pós-conversão
Mesmo uma conversão limpa do bloco de conteúdo deixa resíduos típicos de email no Markdown. Revise estes cinco pontos antes de arquivar ou publicar.
- Restaure os links rastreados. URLs de redirecionamento como
https://click.example.com/track?dest=https%3A%2F%2F...devem ser reescritas para o destino real decodificando o parâmetrodest=(ou similar) — ou remova o link. Evite "verificar" as URLs abrindo-as em massa: isso dispara o rastreamento de abertura e cliques que você está tentando remover - Apague as sobras de pixels de rastreamento, como referências de imagem com alt vazio do tipo
 - Trate as imagens
cid:. Uma referência comoaponta para uma imagem anexada dentro da mensagem (multipart/related) e não resolve fora do email. Se precisar da imagem, exporte-a do .eml e troque a referência - Varra espaços e linhas em branco deixados pelos espaçadores
- Decida quanto manter da assinatura, do rodapé jurídico, do bloco de descadastro e da cadeia de respostas citadas
Convertendo .eml em lote — CLI e Python
Quando há muitos arquivos .eml, ou você quer manter os cabeçalhos, delegue a ferramentas que entendem MIME.
Na CLI, o eml-to-mdAbre em uma nova aba (instalável com pip) gera Markdown com os cabeçalhos incluídos e se apresenta para "dar contexto a agentes de IA sem dar acesso a todos os seus emails". Há também o eml2mdAbre em uma nova aba, escrito em Rust.
pip install eml-to-md
eml2md message.eml # uma mensagem
eml2md *.eml -o converted/ # uma pasta inteira
Para um pipeline em Python, use o módulo emailAbre em uma nova aba da biblioteca padrão para escolher a parte e o markdownifyAbre em uma nova aba para converter. Os detalhes importantes: leia o arquivo em modo binário, passe policy.default e selecione a parte com get_body(). O get_content() decodifica quoted-printable e base64 para você.
import email
from email import policy
from markdownify import markdownify
with open("message.eml", "rb") as f:
msg = email.message_from_binary_file(f, policy=policy.default)
body = msg.get_body(preferencelist=("html", "plain"))
print(markdownify(body.get_content()))
Você também pode passar pelo HTML rumo ao pandocAbre em uma nova aba, ou manter a extração manual e delegar só a conversão a uma CLI (cat body.html | formatarc html-to-markdown). A CLI do FormatArc é explicada em o pacote npm formatarc.
Comparando as opções
| Opção | Ideal para | Requisitos | Cabeçalhos e threads | Email confidencial |
|---|---|---|---|---|
| HTML para Markdown (navegador) | O corpo de alguns emails abertos | Só o navegador (grátis, sem cadastro) | Só o corpo | Processado no navegador, nada enviado |
| CLI da família eml2md | Dezenas de .eml de uma vez | pip / cargo | Incluídos na saída | Processamento local |
| Python (email + markdownify) | Pipelines automatizados recorrentes | Python | Controle total | Processamento local |
| Serviços web com upload | Quando não há outra opção | Navegador | Depende da ferramenta | Enviado a um servidor; há limites diários ou planos pagos |
Perguntas frequentes
Onde encontro o código HTML de um email no Gmail?
O menu da mensagem oferece "Mostrar original", que exibe a mensagem MIME completa. O HTML ali costuma estar codificado em quoted-printable, então copiá-lo gera HTML quebrado. Se você só precisa do corpo, clique nele com o botão direito, escolha Inspecionar e copie o outerHTML do bloco de conteúdo.
Layouts de email viram tabelas Markdown?
Não. Tabelas de layout aninhadas são achatadas e colapsam — na nossa medição, um código completo de 6.491 bytes terminou em uma tabela plana de 12 colunas. A solução é colar apenas o bloco de conteúdo. Tabelas de dados de verdade (uma tabela de preços, um resumo de pedido) são convertidas em tabelas de pipes normais.
O que acontece com as imagens?
Imagens cujo src aponta para uma URL na web sobrevivem como imagens Markdown . Referências que começam com cid: apontam para imagens anexadas e não aparecem fora do email. Apague os pixels de rastreamento de 1x1 depois de converter.
É seguro colar email confidencial em um conversor online?
Com ferramentas baseadas em upload, o conteúdo sai da sua máquina no momento em que você cola. A conversão do FormatArc é concluída dentro do navegador, então não há transmissão alguma. Os critérios de decisão estão em conversores online são seguros?.
Posso colar um arquivo .eml diretamente?
Não. Um arquivo .eml é um contêiner MIME com cabeçalhos e partes codificadas, não HTML. Para uma única mensagem, copie o bloco de conteúdo; para muitas, use uma CLI da família eml2md.
Resumo
Converter email HTML em Markdown se decide no lugar de onde você copia. Cole o código completo e as tabelas de layout aninhadas colapsam em uma tabela plana de 12 colunas com CSS vazando para o texto; cole só o bloco de conteúdo e você obtém 477 caracteres de Markdown limpo (medido: scripts/benchmarks/html-email-to-markdown/). Para alguns emails abertos, copie o bloco de conteúdo com as ferramentas do desenvolvedor e use HTML para Markdown; para lotes de .eml, uma CLI da família eml2md; para pipelines, o módulo email do Python. Seja qual for a rota, planeje a limpeza de links e pixels de rastreamento como parte da conversão, não como algo opcional.