Como bloquear e-mails descartáveis no cadastro
Três jeitos de pegar e-mails temporários no formulário de cadastro, de uma lista fixa a uma API, com código, e os erros que bloqueiam usuários reais.
O que conta como e-mail descartável
Um endereço descartável (ou temporário) vem de um serviço que entrega caixas de entrada sem cadastro, geralmente por minutos ou horas. Mailinator, Guerrilla Mail, 10 Minute Mail e milhares de domínios menos conhecidos funcionam assim. São úteis para quem quer fugir de newsletters, e igualmente úteis para quem cria muitas contas.
Três categorias vizinhas costumam ser confundidas com eles e pedem tratamento diferente:
- Relays de privacidade como o
privaterelay.appleid.comdo Entrar com a Apple, oduck.comdo DuckDuckGo ou o Firefox Relay encaminham para uma caixa real e duradoura. Bloqueá-los prejudica clientes preocupados com privacidade. Trate-os no máximo como um sinal de risco pequeno. - Provedores gratuitos como Gmail, Outlook.com ou Yahoo não são descartáveis. O padrão de abuso deles é outro: aliases de uma mesma caixa, tratados no nosso guia sobre aliases do Gmail.
- Domínios que nem recebem e-mail — erros como
gmial.comou domínios inventados. Também vale pegá-los, porque ninguém consegue confirmar uma conta ali.
Opção 1: uma lista fixa no seu código
Listas abertas de domínios descartáveis são mantidas no GitHub e têm dezenas de milhares de entradas. O jeito mais simples é carregar uma num conjunto e checar o domínio no cadastro:
# Python DISPOSABLE = set(open("disposable_domains.txt").read().split()) def is_disposable(email: str) -> bool: domain = email.rsplit("@", 1)[-1].strip().lower().rstrip(".") parts = domain.split(".") # pega subdomínios também: mail.tempdomain.com -> tempdomain.com return any(".".join(parts[i:]) in DISPOSABLE for i in range(len(parts) - 1))
Não custa nada e não adiciona latência. Os problemas:
- Ela envelhece. Domínios descartáveis novos aparecem o tempo todo, e muitos serviços trocam de domínio justamente para escapar das listas. Uma lista copiada há seis meses perde os mais novos, que são exatamente os que os abusadores usam.
- As listas discordam. Listas diferentes incluem domínios diferentes, e algumas têm erros. Juntar várias dá mais cobertura, mas mais manutenção.
- Você precisa de um job de atualização e de um deploy (ou recarga) a cada mudança.
Opção 2: checar o servidor de e-mail (MX)
Uma consulta DNS dos registros MX do domínio diz se ele consegue receber e-mail. Isso pega erros de digitação e domínios inventados que nenhuma lista contém:
# Python, com dnspython import dns.resolver def can_receive_mail(domain: str) -> bool: try: return len(dns.resolver.resolve(domain, "MX", lifetime=2)) > 0 except dns.resolver.NXDOMAIN: return False except Exception: return True # problema de DNS não é culpa do usuário: libere
Guarde o resultado em cache por domínio, use um timeout curto e nunca recuse um cadastro porque o seu resolvedor DNS teve um momento ruim. Repare que a checagem de MX não pega serviços descartáveis — eles recebem e-mail perfeitamente, é o trabalho deles.
Opção 3: uma API que faz as duas coisas e se mantém atualizada
Uma API tira a manutenção da lista e as consultas MX do seu código. O Attrelix junta várias listas públicas, atualiza todo dia, registra quando cada domínio foi visto pela primeira vez, checa o servidor de e-mail e normaliza aliases do Gmail na mesma chamada — e também pontua rede e dispositivo, então você recebe uma decisão por cadastro e não só um veredito sobre o e-mail. Dá para testar a consulta de domínio de graça no verificador de e-mail descartável.
curl https://attrelix.com/v1/check \ -H "Authorization: Bearer $ATTRELIX_SECRET" \ -H "Content-Type: application/json" \ -d '{"email":"someone@mailinator.com","ip":"203.0.113.9"}'
A resposta inclui email.disposable, email.relay, email.mx e o endereço normalizado, junto com a decisão geral e os motivos.
Erros que bloqueiam usuários reais
- Bloquear relays. O relay privado da Apple é usado por muitos usuários de iPhone que entram com a Apple. Bloqueá-lo bloqueia essas pessoas.
- Bloquear por erro de DNS. Um timeout não prova que o domínio é falso.
- Listas amplas demais. Algumas listas comunitárias incluem pequenos provedores legítimos ou domínios de empresas. Se um cliente reclamar, libere o domínio em vez de discutir.
- Mensagem de erro sem saída. “E-mail inválido” confunde uma pessoa real que digitou um endereço real. Diga que caixas temporárias não são aceitas e peça outro endereço.
O que a checagem de descartáveis não pega
Bloquear domínios descartáveis aumenta um pouco o custo do abuso: o abusador passa para o Gmail. Daí em diante, o abuso aparece como muitas contas por trás de uma caixa ou de um dispositivo. É aí que entra detectar contas múltiplas.
Resumo
- Separe domínios descartáveis, relays de privacidade, provedores gratuitos e domínios mortos.
- Uma lista fixa é um bom começo, mas envelhece; atualize ou use uma API.
- Use checagem de MX para domínios mortos e libere em caso de problema de DNS.
- Espere que os abusadores passem para aliases do Gmail e normalize os endereços.