Por que sua validação de e-mail com Regex provavelmente está errada
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.
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.
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.