Este projeto visa obter bom nível de confiança de um determinado endereço de e-mail, considerando diversos fatores, incluindo a validade do Top-Level Domain (TLD) que é quando um domínio está listado entre os domínios válidos existentes como .com, .com.br etc., a existência de registros de DNS do tipo MX associados ao domínio e a validação de sintaxe do e-mail.
Existem várias maneiras de atribuir uma alta taxa de confiança a um determinado endereço de e-mail, como a verificação da conexão SMTP e a confirmação do e-mail quando uma mensagem é enviada e aguarda-se uma ação por parte do usuário, entre outras. No entanto, também existem abordagens que incluem a verificação da validade do TLD do domínio em questão, a presença de registros DNS do tipo MX vinculados ao domínio e outras verificações relevantes.
A abordagem mais eficaz envolve a implementação de um fluxo de confirmação de e-mail. No entanto, essa opção é mais adequada quando o usuário detentor do endereço de e-mail está se cadastrando no sistema. Para processos em lote (ETL), essa abordagem proativa não é recomendada, uma vez que o momento de check-in do usuário no sistema já passou e pode causar algum desconforto se o usuário/cliente for solicitado a confirmar algo algum tempo depois de se cadastrar no sistema.
A atribuição de uma pontuação baseada em métricas, como a existência do domínio entre lista de domínios válidos (TLD) que é gerenciado pela IANA, registros DNS do tipo MX e validação de sintaxe do e-mail, proporciona um bom grau de confiança. No escopo desse projeto, um domínio com TLD válido tem um peso de 45%, a presença de registros DNS do tipo MX contribui com mais 25% e uma sintaxe válida tem um peso de mais 20% no valor final da pontuação.
Regra | percentual da pontuação |
---|---|
TLD válido | 45% |
Registros DNS tipo MX | 25% |
Sintaxe válida | 20% |
Observação: Esses percentuais fazem sentido para o contexto da regra de negócio que utilizei nesse projeto, mas caso queira pode alterar para outros percentuais.
Se o TLD for inválido, as demais regras não serão aplicadas, e a pontuação é cumulativa. Um exemplo é um endereço de e-mail onde seu TLD é válido, mas não existem registros de DNS do tipo MX e a sintaxe do e-mail é válida, recebe uma pontuação de 65%.
O valor final da pontuação é a soma do percentual das três regras, podendo chegar, no máximo, a 90%. Isso ocorre porque, mesmo com essas verificações, ainda não é possível alcançar 100% de confiança no endereço de e-mail específico. Para atingir 100% de confiança, seria necessário realizar um processo adicional de confirmação de e-mail.
Foi criada uma API com FastAPI (Python) que inclui um endpoint (/email_validator) que recebe um payload no método POST. Esse payload contém uma chave chamada email
e um valor que descreve o endereço de e-mail, por exemplo: {"email": "[email protected]"}
. Esse endereço de e-mail será validado e a API deverá responder com o seguinte conteúdo:
{
"email": "[email protected]",
"domain_tld": true,
"domain_dns_mx": true,
"syntax": true,
"score": 90,
"message": "Trusted email"
}
Para implantar essa solução disponibilizei uma imagem no Docker Hub, onde com o seguinte comando do Docker você criar um contêiner e já pode iniciar suas validações:
- Ativando a solução
docker run -d --name=email-validator --hostname=email-validator -p 8888:8888 renatoelho/email-validator:0.0.1
- Endpoint da documentação
- Endpoint para Healthcheck
http://localhost:8888/healthcheck
Observação: Esse endpoint do Healthcheck é para, se caso você for implantar a solução utilizando o docker compose por exemplo.
- Endpoint da solução (Não é acessível pelo navegador)
http://localhost:8000/email_validator
Para obter mais detalhes sobre como este projeto foi desenvolvido, verifique os arquivos do projeto clicando aqui. Para acessar a parte de construção da imagem da solução, visite aqui.
Este projeto é licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.
Agradecimento a Emerson de Sales por suas contribuições para este projeto!
- Revisar a white list para incluir novos domínios de e-mails gratuitos.
- Adicionar cache para consultas mais recentes (Redis uma opção).
- Melhorar o cálculo do % para registros de DNS MX adicionando ping aos servidores disponíveis.
O que é um domínio de nível superior (TLD)?, Cloudflare. Disponível em: https://www.cloudflare.com/pt-br/learning/dns/top-level-domain/. Acesso em: 3 out. 2023.
Tool Documentation, DNS Recon. Disponível em: https://www.kali.org/tools/dnsrecon/#dnsrecon. Acesso em: 3 out. 2023.
MX Record, Wikipedia. Disponível em: https://pt.wikipedia.org/wiki/Mx_record. Acesso em: 3 out. 2023.
Por que você deve verificar endereço de email?, Emailable. Disponível em: https://emailable.com/pt-br/blog/por-que-voce-deve-verificar-endereco-de-email/. Acesso em: 3 out. 2023.