Executando verificação de segurança...
12

Validação de E-mail Além da Sintaxe: Reduzindo Custos de Disparo

Em um projeto recente na empresa onde trabalho, lidávamos com o envio de e-mails transacionais para clientes utilizando o SendPulse.

Com o aumento do volume de envios, falhas causadas por e-mails inválidos começaram a gerar desperdício de créditos e distorcer métricas de entregabilidade.

A primeira abordagem adotada foi a validação de sintaxe conforme a RFC 5322, aliada a um registro detalhado de erros e exceções em logs, cruzando essas informações com os retornos fornecidos pela própria plataforma de envio.

A análise desses dados revelou um padrão de que a maioria das falhas estava relacionada a e-mails inexistentes, e não a problemas temporários ou de infraestrutura. Ou seja, muitos envios falhavam por motivos que poderiam ser identificados antes mesmo da tentativa de disparo.

Para atacar esse problema, adicionamos uma nova camada de validação baseada na consulta a registros MX (Mail eXchange) do domínio antes do disparo. O resultado foi imediato: menos exceções, menos tentativas de envio desnecessárias e uma melhora perceptível nas métricas da operação.

Essa experiência prática evidenciou que validar e-mails apenas pela sintaxe não é suficiente, e que pequenas melhorias no processo de validação podem gerar ganhos técnicos e financeiros reais, especialmente em plataformas SMTP que cobram por disparo, independentemente do sucesso ou erro.

Sintaxe Válida Não Significa E-mail Entregável

Validar e-mail por sintaxe resolve apenas uma parte do problema.

A validação por RFC responde se o endereço é bem-formado. O que importa em produção é se ele é entregável.

Mas o que você quer responder em produção quase sempre é: "isso é entregável?".

Alguns exemplos de endereços sintaticamente válidos, mas inúteis na prática:

A validação de sintaxe é a primeira barreira, mas não a última.

Onde o Dinheiro Escapa: Custo e Métricas

Quando o volume de envio cresce, pequenas taxas de erro passam a ter um impacto relevante:

  • Desperdício de créditos por tentativa
  • Aumento de falhas e hard bounces
  • Ruído em observabilidade (exceções e retries desnecessários)

Plataformas SMTP, como o SendPulse, normalmente cobram por tentativa de envio, não por sucesso.

Reduzir disparos para e-mails inválidos não é perfumaria, é otimização de custo e qualidade.

Camadas de Validação de E-mail

Uma forma prática de estruturar a validação é pensar em camadas, aplicando as mais baratas primeiro e avançando conforme necessário.

Normalização + Sintaxe (Barato e Obrigatório)

Antes de qualquer validação, o primeiro passo é a normalização:

  • trim
  • Lower-case do domínio (o domínio é case-insensitive)
  • Remover espaços invisíveis
  • Bloquear casos óbvios (sem @, sem domínio, etc.)

Depois, validação de sintaxe conforme RFC (ou biblioteca confiável que implemente bem as regras).

Cache de Domínio Conhecido (Custo Zero Depois da Primeira Vez)

A ideia é:

  • Se dominio.com já foi validado recentemente, não faz sentido consultar DNS toda hora
  • Você reduz latência e carga
  • O custo marginal tende a zero

Boas práticas para o cache:

  • TTL por domínio
  • Guardar metadados
  • Estratégia de invalidação: se começar a aparecer muito hard bounce em um domínio "validado", revalidar

Cachear domínio, e não e-mail, é uma decisão simples que escala muito melhor.

Consulta DNS/MX (Barato e com Ótimo Retorno)

Registro MX indica "para onde entregar e-mails" naquele domínio. Se não existe MX (ou se DNS falha consistentemente), a chance de entrega ser possível cai muito.

Isso resolve muito bem:

  • Domínio inexistente
  • Domínio sem infraestrutura de e-mail

Porém MX ok não garante que o usuário existe.

Verificação via SMTP (Profundo, Caro e com Pegadinhas)

Além da validação por sintaxe e da consulta a registros MX, existe uma abordagem mais profunda para validação de e-mails: a verificação via comunicação direta com o servidor SMTP do domínio.

Essa técnica tenta entender se uma caixa de entrada específica existe estabelecendo uma conexão SMTP e analisando as respostas do servidor, sem efetivamente enviar um e-mail. É nesse nível que ferramentas como o check-if-email-exists atuam.

Esse método pode aumentar a precisão da validação, especialmente em cenários onde identificar a existência do destinatário é relevante. No entanto, ele também traz custos e limitações importantes.

Do ponto de vista operacional, abrir conexões SMTP em volume pode ser interpretado por provedores como comportamento abusivo, resultando em rate limit ou bloqueios. Além disso, muitos servidores utilizam mecanismos como catch-all, greylisting ou proteções contra enumeração de usuários, o que pode gerar falsos positivos ou falsos negativos.

Fluxo Interessante: Sintaxe + MX + cache

O fluxo abaixo, na minha opinião, é uma ótima condição e interessante de se aplicar:

  1. Normaliza o e-mail (trim, etc.)
  2. Valida sintaxe de acordo com RFC 5322
  3. Extrai domínio
  4. Se o domínio está no cache como válido -> passa
  5. Se não está no cache:
    • Faz consulta MX
    • Se falhar -> bloqueia antes de disparar
    • Se passar -> grava domínio no cache

O fluxograma abaixo resume a estratégia adotada, combinando validação de sintaxe, cache por domínio e consulta a registros MX.

flowchart TD
  A["Recebe e-mail"] --> B["Normaliza: trim, domínio lowercase, remove espaços invisíveis"]
  B --> C{"Sintaxe válida? (RFC 5322)"}
  C -- "Não" --> R["Rejeita envio"]
  C -- "Sim" --> D["Extrai domínio"]

  D --> E{"Domínio está no cache como válido (TTL ativo)?"}
  E -- "Sim" --> OK["Aceita envio"]

  E -- "Não" --> F["Consulta DNS: registros MX do domínio"]
  F --> G{"MX válido e consulta bem-sucedida?"}

  G -- "Não" --> R2["Rejeita envio (DNS/MX)"]
  G -- "Sim" --> H["Salva domínio no cache (TTL)"]
  H --> OK

Na prática, a combinação sintaxe + MX + cache costuma entregar o melhor custo-benefício: reduz tentativa inútil, limpa o pipeline e melhora os números que importam, especialmente quando sua plataforma cobra por volume de envios.

Limites e Cuidados com MX

Utilizando MX, podem acontecer:

  • Timeout e instabilidade: um erro temporário de DNS não deveria necessariamente "invalidar" e-mail para sempre.
  • Domínio catch-all: alguns servidores aceitam qualquer destinatário e só falham depois (ou nunca falham).
  • Política de erro: se MX falhar por timeout: Negar? Re-tentar? Permitir e observar?

Uma política simples e eficiente:

  • 1 retry rápido com backoff pequeno
  • Se falhar de novo: marca como “indeterminado” por X minutos
  • Faz log de tudo (latência e tipo de erro, por exemplo)

Validar melhor não é apenas evitar erros: é gastar menos, medir melhor e operar com previsibilidade.

Post realizado originalmente no meu blog: freitaschz.com

Nem todos os posts são republicados em outras plataformas, e esta versão pode estar desatualizada em relação à original.
A versão definitiva sempre estará disponível no blog e, se achar interessante, recomendo conferir outros conteúdos por lá 🙂

Carregando publicação patrocinada...
4

Pessoal o que vou colocar aqui vai alem do que o artigo se propos , mas é o principal calcanhar de Aquiles do envio de email. É o problema com Spam Traps.

Spam Traps (armadilhas de spam) é o "ponto cego" mais perigoso da estratégia focada apenas em sintaxe e MX records. Quando um domínio antigo ou abandonado se transforma em uma spam trap, ele se torna uma ameaça muito maior do que um simples e-mail inválido, pois o impacto não é apenas financeiro (custo de envio), mas sim reputacional.

Alguns pontos críticos sobre como spam traps afetam a tese do artigo:

  1. O Problema das "Pristine" vs. "Recycled" Traps

O método sugerido no artigo (verificar MX) não consegue distinguir um e-mail real de uma spam trap:

Recycled Traps: São endereços que existiram, foram desativados e, após algum tempo, reativados pelos provedores para monitorar quem envia e-mails para listas desatualizadas. O domínio terá um MX válido, o e-mail terá sintaxe correta, mas o disparo resultará em blacklist instantânea.

Impacto: Se você envia para uma recycled trap, os provedores (Gmail, Outlook) entendem que você não faz limpeza de lista (list hygiene). Sua taxa de entrega cairá drasticamente para todos os outros clientes legítimos.

  1. Domínios Antigos que viram Traps

Muitas vezes, empresas compram domínios que expiraram para transformá-los em "honeypots".

O risco do MX: O domínio terá registros MX apontando para os servidores da empresa de segurança (ex: Spamhaus ou Proofpoint). Para o algoritmo proposto no artigo, esse domínio pareceria "saudável" e "válido", mas na verdade é uma armadilha ativa.

  1. Como mitigar (O que faltou no fluxo de validação)

Para lidar com o que o artigo propõe e adicionar a camada de proteção contra traps, seriam necessários estes passos extras:

Validação de Atividade (Engagement): Se um e-mail no seu banco de dados não abre ou não clica em nada há mais de 6 ou 12 meses, ele é um candidato forte a virar uma recycled trap. A recomendação técnica é remover ou isolar esses e-mails, mesmo que o MX seja válido.

Uso de "Suppression Lists" globais: Existem bases de dados de domínios conhecidos por serem apenas coletores de spam ou domínios descartáveis (como mailinator.com). O cache sugerido no artigo deveria incluir uma "blacklist" de domínios conhecidos por não terem usuários reais.

Double Opt-in: É a única defesa 100% eficaz contra pristine traps (e-mails criados apenas para serem armadilhas). Se o usuário não clicar no link de confirmação enviado para o e-mail, ele nunca entra na lista de disparo principal. Isso evita que robôs cadastrem spam traps no seu formulário.

1

Comentário impecável e uma excelente observação! Alguns dos pontos que você trouxe eu realmente não tinha conhecimento e concordo totalmente, especialmente em cenários de marketing.

O artigo foca intencionalmente em validação técnica e redução de custo, dentro de aplicações transacionais, onde não há coleta aberta de e-mails nem campanhas. Foi exatamente esse contexto que enfrentei recentemente, em caso de envio de faturas e notas fiscais. Para cenários de marketing, por exemplo, sem dúvida, o fluxo precisaria incluir todo esse conjunto adicional de estratégias.

São problemas diferentes, com riscos diferentes, e por isso as abordagens também mudam. Podemos concluir que validação de e-mail não é uma técnica única, mas um conjunto de estratégias que mudam conforme o tipo de envio e a situação.

Seu comentário levantou pontos importantes que valem um complemento no próprio artigo. Vou considerar adicionar uma nota complementar sobre essa discussão e distinção de contextos de envio.

Comentário enriquecedor, obrigado!!

2

pra saber se a pessoa 'leu' da pra postar uma <img src=img.png?userid=68987> (no html do email)

quando seu server recebe uma request <img src=img.png?userid=68987>
deve ser pq o user 68987 abriu

1

Além disso, muitos servidores utilizam mecanismos como catch-all

Todos os meus e-mails são catch-all.

Tenho um domínio personalizado e cada site que me registro crio um endereço diferente, ex [email protected]

assim qualquer spam que eu começar a receber eu vou saber exatamente de onde começou

1

Muito bom, parabens pela iniciativa de compilar e compartilhar, fiquei muito interessado em saber se houveram métricas para acompanhar a redução de desperdicio.

Olhamos para esse problema recentemente e demos uma solução qualquer a nível de validação de dominios conhecidos e possíveis erros de digitação, sem dúvida vamos adicionar esse fluxo em nossa validação.

Nosso caso não tem uma frequencia grande de envio mas é uma dor de cabeça se descobrimos tardiamente que o email não existia

1

Gostei bastante da abordagem, um post bem útil! Mostra bem como validar só por sintaxe não basta e o impacto real disso em custo e métricas. A parte relacionada a cache + MX é ouro para quem envia em volumes consideráveis e com certeza deve ser uma das primeiras coisas a serem pensadas nesse tipo de sistema.