Skip to content

Por que sua validação de e-mail com Regex provavelmente está errada

Published at

🇧🇷 TabNews on 2024-08-07
🇧🇷 Dev.to on 2024-08-08

Olá, pessoal!

Hoje eu quero bater um papo sobre um assunto que parece trivial, mas que vira um pesadelo técnico em um piscar de olhos: a validação de e-mail.

Se você escreve código, com certeza já teve que validar um campo de e-mail em algum formulário. Qual foi a sua primeira reação? Provavelmente pensou em usar uma expressão regular, não foi? É o caminho padrão: a gente abre o Stack Overflow, encontra aquela Regex quilométrica, faz o famoso "copia e cola" e segue a vida. Mas você já parou para pensar se essa abordagem realmente funciona? E se eu te falasse que, na maioria das vezes, nós estamos fazendo isso do jeito errado?

Lá em 2021, eu me deparei com um artigo chamado "Your E-Mail Validation Logic is Wrong", escrito pelo Jan Schaumann. Confesso que fiquei bem surpreso. Ele explorou as RFCs - que são os documentos que definem como a internet deve funcionar - e mostrou vários casos de e-mails perfeitamente válidos que quase todas as expressões regulares do mundo iriam barrar. É um choque de realidade perceber como a nossa percepção sobre o que é um e-mail "correto" está longe dos padrões oficiais.

Sabe qual é o único jeito de ter 100% de certeza que um e-mail existe? É mandando uma mensagem para ele.

Nós costumamos fazer isso em fluxos de cadastro tradicionais. O usuário preenche os dados e a gente envia aquele link de confirmação. É a solução mais limpa e eficaz que existe.

O problema das listas de e-mail existentes

A coisa complica de verdade quando uma empresa herda aquela base de dados antiga, com milhares de endereços acumulados ao longo dos anos sem nenhum filtro. Se a gente decide disparar uma campanha para uma lista "suja" dessas, o resultado é desastroso. As taxas de bounce (devolução) sobem, o domínio começa a ser marcado como spam e a reputação vai para o ralo.

E tem um detalhe: mesmo que o endereço seja tecnicamente impecável, ele pode não ser entregue. Talvez a caixa esteja cheia, ou o filtro de spam do destinatário seja agressivo demais, ou o servidor deles esteja passando por instabilidades. Sem falar, claro, no erro crasso de comprar listas de e-mail. Eu nem preciso dizer que isso é uma prática terrível que nós devemos evitar a qualquer custo, certo?

Se a Regex falha e enviar um e-mail de teste para cada contato é inviável, como a gente limpa essa bagunça? A saída é olhar para as duas partes que formam o endereço: a parte local (o que vem antes do @) e o domínio (o que vem depois).

Validando o Domínio com DNS

Eu acredito que o ponto de partida ideal seja o domínio. Uma consulta rápida ao DNS já entrega pistas valiosas sobre se aquele endereço consegue, de fato, receber alguma coisa.

  1. Registro NS (Name Server): O primeiro passo básico é conferir se o domínio existe e se está registrado. Quando nós consultamos o registro NS, temos essa confirmação. Se não existe NS, o domínio é apenas um fantasma.

  2. Registro MX (Mail Exchange): Aqui é onde a mágica acontece. Esse registro lista os servidores encarregados de receber as mensagens. Se um domínio não tem registros MX, os e-mail enviados para ele simplesmente não têm para onde ir. Para sermos ainda mais criteriosos, a gente pode consultar os registros A/AAAA dos servidores listados no MX para garantir que as máquinas físicas realmente existam.

No meu artigo anterior, "DoH: como funciona a consulta DNS no Clear Address?", eu mostro como nós podemos automatizar essas consultas usando uma API pública.

Cuidado com os domínios temporários ou descartáveis

Além de olhar para o DNS, nós precisamos ficar de olho nos chamados E-mails Descartáveis. Sabe aqueles serviços como Temp Mail que oferecem um endereço por apenas 10 minutos? O pessoal usa isso para fugir de spam, mas para quem envia, esses endereços são um buraco negro.

O e-mail some em instantes e a gente fica com um dado inútil na mão, prejudicando o engajamento. Existem vários repositórios no GitHub que mantêm listas desses domínios atualizadas. Nós precisamos monitorar isso de perto, já que novos serviços surgem o tempo todo. Comparar a sua base com essas listas ajuda a eliminar endereços que, embora válidos sintaticamente, não têm valor algum para o negócio.

Quando mais de uma pessoa cuida de uma conta

Outro ponto de atenção são os Endereços Funcionais (Role-Based). Estou falando de e-mails como vendas@, contato@ ou suporte@. Eles representam um papel, não uma pessoa específica. Enviar marketing para esses endereços costuma ser uma dor de cabeça. Quem fez o cadastro pode ter saído da empresa, e o sucessor, ao ver uma mensagem que ele nunca pediu, não vai pensar duas vezes antes de nos marcar como spam.

Conclusão

Essa estratégia que eu mostrei aqui não é uma bala de prata. Ela não garante que a caixa de entrada existe ou que o usuario está digitado corretamente.

Por outro lado, ela eleva muito o nível da sua base, garantindo que os endereços estão bem estruturados e apontam para domínios legítimos. No fim das contas, essa higiene de listas nos permite:

  • Derrubar as taxas de devolução causadas por erros bobos de digitação ou domínios que não existem.
  • Limpar aqueles endereços descartáveis que só servem para gastar dinheiro.
  • Tratar com cuidado os endereços funcionais antes que eles estraguem a nossa reputação.

Shameless plug

Para simplificar a minha vida e a sua, eu criei o Clear Address. Eu até postei um Pitch sobre ele recentemente. Com uma chamada simples de API, a gente consegue rodar todas essas validações de uma vez só.

Dê uma olhada: uma requisição GET para a URL https://clear-address.rda.run/v1/contato@temp-mail.org já te avisa na hora se o domínio é descartável ou se o endereço é funcional.

Fica aqui o meu convite para você testar a ferramenta e ver como ela pode ajudar.