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

[Dúvida] É possível desenvolver um validador de e-mail altamente preciso sem recorrer a APIs externas?

Olá! Meu nome é Eduardo, e sou novo por aqui 😁

Minha pergunta envolve uma questão que venho me "batendo" nos últimos dias.

Dando um contexto maior, meu cliente solicitou a criação de um "validador de e-mails" que verificasse se os endereços de e-mail cadastrados realmente existem.

A princípio, isso parecia simples, mas na prática, percebi que não é tão fácil quanto parece...

Estou desenvolvendo uma API em Python e sou iniciante na área. Após algumas pesquisas, cheguei às seguintes etapas de verificação:

  1. Validação da formatação do endereço de e-mail;
  2. Validação do domínio (verificar se ele existe);
  3. Validação dos registros 'MX' (verificar se existem);

No entanto, mesmo após essas três etapas, alguns e-mails inválidos podem passar despercebidos. Um exemplo hipotético seria o endereço de e-mail "[email protected]".

Nesse exemplo, suponhamos que as etapas 1, 2 e 3 estejam todas corretas, mas o endereço de e-mail "[email protected]" não existe de fato, pois a caixa de e-mail correspondente não foi criada adequadamente. Por acaso, existe uma caixa chamada "[email protected]," o que fez com que os registros MX fossem criados e, portanto, validou a terceira etapa.

Aqui surge a grande questão: como validar se a caixa de e-mail foi realmente criada e está apta a receber e-mails?

Eu sei que é comum enviar um e-mail de validação e verificar se ele foi recebido para confirmar a validade, mas, neste caso em específico, eu não gostaria que o usuário final pudesse visualizar o e-mail de validação, logo me parece não ajudar.

Também estou ciente de que existem APIs pagas que realizam todos esses procedimentos e validam endereços de e-mail, mas não tenho detalhes sobre como elas funcionam.

Gostaria de saber se é possível realizar uma validação desse nível, sem recorrer a uma API externa, e se vocês poderiam me dar uma orientação sobre por onde começar a estudar para desenvolver essa validação.

Aceito todos tipos de ideias e feedbacks que possam vir, tudo será de grande ajuda 😁

Carregando publicação patrocinada...
7

Verificar a existência real de uma caixa de e-mail sem enviar um e-mail é complicado. A abordagem mais comum, como você mencionou, é enviar um e-mail de confirmação para o usuário.

Existem algumas abordagens que podem ser consideradas, mas nenhuma é 100% garantida:

  1. VRFY e RCPT TO: Estes são comandos SMTP que podem ser usados para verificar se uma caixa de correio específica existe em um servidor. Entretanto, muitos servidores desativam esses comandos por razões de segurança e privacidade.

  2. Estabeleça uma conexão SMTP: Você pode tentar estabelecer uma conexão SMTP com o servidor de e-mail do domínio, simular o início de uma transmissão de e-mail e verificar a resposta ao fornecer o endereço de e-mail como destinatário. Se o servidor responder que está pronto para aceitar e-mails para esse endereço, é provável que a caixa de e-mail exista. No entanto, esta técnica também tem problemas:

    • Alguns servidores sempre respondem positivamente como medida de segurança.
    • Estabelecer muitas conexões desse tipo pode fazer com que seu IP seja marcado como suspeito.
  3. Bibliotecas e Ferramentas de Terceiros: Existem bibliotecas e ferramentas que tentam fazer isso, como o validate_email em Python. Eles geralmente combinam as técnicas mencionadas acima. Porém, não espere 100% de precisão.

4

Qualquer servidor de email minimamente seguro não vai permitir que você faça essa validação sem enviar um e-mail, pois essa é uma vulnerabilidade catalogada e conhecida como User Enumeration, literalmente "enumeração de usuários".
O melhor que pode ser feito é tentar usar um misto das técnicas citadas e mesmo assim, um gmail da vida provalmente irá te enganar.
Espero ter ajudado!

1

Não é possível saber se o e-mail existe sem tentar enviar um e-mail para ele (supondo que o domínio seja valido, tenha um registro mx e o email seja valido).

você teria que enviar um email e aguardar não receber um erro.

1

A única forma que eu imagino de "codar na unha", é vc criar uma API que envia algum template de e-mail e verifica se o e-mail chegou ao correspondente

1

Isso não é possível sem enviar uma mensagem e esperar algum tipo de retorno, principalmente sem o conhecimento do destinatário. E para hospedagens de e-mail que oferecem caixas postais do tipo catch-all, aí que você não vai ter certeza mesmo.

1

100% preciso creio que não é possível.
Alguns servidores de e-mail são configurados pra aceitar mensagens enviadas para qualquer endereço do domínio, então todos seriam válidos.

1

Olha, a validação de email por confirmação é importante não so pra confirmar se o email é valido, mas pra confirmar que o email é realmente dessa pessoa, até porque imagina se vc digita seu email errado? ai vc vai ter uma conta com um email que nao é seu? e o dono do email vai ter o uso indevido do seu email sendo assim configurado como uma vulnerabilidade, sabendo disso, penso que revise a ideia de nao enviar email

0

Fora o que já te responderam, a resposta mais óbvia para sua pergunta final é: Sim, é sempre possível fazer algo sem a ajuda de uma API, basta que você code o que a API faz.

Afinal de contas, API, bibliotecas, frameworks... são apenas "códigos prontos", não é mesmo? Logo, não precisamos deles, mas vale a pena?

Se você acha que vale, beleza.