Email HTML para PDF: Arquive Campanhas de Email — TongoRender Blog
Voltar ao Blog
guidesemailpdfarchival

Email HTML para PDF: Arquive Campanhas de Email

Aprenda a converter campanhas de email HTML em arquivos PDF. Entenda os desafios do CSS específico de email e como lidar com eles para uma saída PDF perfeita.

TongoRender Team8 de março de 20268 min

Equipes de marketing por email enviam centenas de campanhas por ano. Regulamentações como LGPD e GDPR, combinadas com requisitos internos de conformidade, frequentemente exigem o arquivamento de cada email enviado. Enquanto provedores de email armazenam dados de campanhas, ter um arquivo PDF fornece um registro portátil, pesquisável e juridicamente válido que não depende de um fornecedor terceirizado.

Por Que Arquivar Emails como PDF?

  • Conformidade regulatória — Setores financeiro e de saúde exigem registros duráveis de todas as comunicações com clientes.
  • Proteção legal — Em disputas, um PDF com timestamp é uma evidência mais forte que um screenshot.
  • Independência de fornecedor — Se você trocar de plataforma de email, seu arquivo permanece intacto.
  • Revisão interna — Equipes de produto e jurídico podem revisar campanhas anteriores sem acessar a plataforma de email.
  • Relatórios para clientes — Agências podem entregar portfólios de campanhas como documentos PDF profissionais.

O Desafio: HTML de Email Não é HTML Web

Emails HTML usam um subconjunto de HTML e CSS que remonta ao início dos anos 2000. Clientes de email têm engines de renderização amplamente inconsistentes, então desenvolvedores de email dependem de:

  • Layouts baseados em tabelas em vez de Flexbox ou Grid
  • Estilos inline em vez de folhas de estilo externas
  • Atributos obsoletos como bgcolor, align e cellpadding
  • Comentários condicionais para Outlook (<!--[if mso]>)

Pré-processando HTML de Email

Antes de enviar HTML de email para uma API de PDF, limpe-o:

const { JSDOM } = require('jsdom');

function preprocessEmailHTML(emailHtml) {
  const dom = new JSDOM(emailHtml);
  const document = dom.window.document;

  // Remover comentários condicionais do Outlook
  const html = emailHtml.replace(/<!--\[if[^\]]*\]>.*?<!\[endif\]-->/gs, '');

  // Remover pixels de rastreamento (imagens 1x1)
  document.querySelectorAll('img').forEach(img => {
    if (img.width <= 1 || img.height <= 1) img.remove();
  });

  // Garantir que imagens usem URLs absolutas
  document.querySelectorAll('img').forEach(img => {
    if (img.src && !img.src.startsWith('http')) {
      img.src = `https://cdn.example.com${img.src}`;
    }
  });

  // Adicionar estilos amigáveis para impressão
  const style = document.createElement('style');
  style.textContent = `
    @media print {
      body { width: 100% !important; margin: 0 !important; }
      table { width: 100% !important; }
      img { max-width: 100% !important; height: auto !important; }
    }
  `;
  document.head.appendChild(style);

  return dom.serialize();
}

Convertendo para PDF

async function archiveEmail(campaignId, emailHtml, subject) {
  const cleanHtml = preprocessEmailHTML(emailHtml);

  const response = await fetch('https://api.tongorender.io/v1/pdf', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.TONGORENDER_API_KEY,
    },
    body: JSON.stringify({
      html: cleanHtml,
      format: 'A4',
      margin: { top: '15mm', bottom: '15mm', left: '10mm', right: '10mm' },
    }),
  });

  if (!response.ok) throw new Error(`Arquivamento falhou: ${response.statusText}`);
  return Buffer.from(await response.arrayBuffer());
}

Arquivamento em Lote com Mailchimp

const mailchimp = require('@mailchimp/mailchimp_marketing');
mailchimp.setConfig({ apiKey: process.env.MAILCHIMP_API_KEY, server: 'us1' });

async function archiveAllCampaigns() {
  const campaigns = await mailchimp.campaigns.list({ count: 100, status: 'sent' });

  for (const campaign of campaigns.campaigns) {
    const content = await mailchimp.campaigns.getContent(campaign.id);
    const pdf = await archiveEmail(campaign.id, content.html, campaign.settings.subject_line);
    fs.writeFileSync(`archives/${campaign.id}.pdf`, pdf);
    console.log(`Arquivado: ${campaign.settings.subject_line}`);
  }
}

Dicas para Conversão Perfeita de Email para PDF

  • Defina uma largura fixa — Emails geralmente têm 600px de largura. Configure o viewport ou wrapper para corresponder.
  • Lide com web fonts — Muitos clientes de email removem web fonts, mas PDFs podem renderizá-las. Mantenha os links das fontes.
  • Remova elementos interativos — Botões com handlers JavaScript ou elementos de formulário não funcionarão no PDF.
  • Teste variantes de modo escuro — Se seu email tem CSS de modo escuro, decida qual versão arquivar.

O TongoRender lida com layouts de email baseados em tabelas, estilos inline e atributos HTML legados sem problemas. O motor de renderização Chromium trata HTML de email como qualquer página web.

Arquive seus emails com o TongoRender — 100 renderizações gratuitas por mês, sem necessidade de cartão de crédito.

Compartilhe este artigoCompartilhar no Twitter