Pesquisa de servidores MX DNS nativos em C# (sem dependências)
Contexto
Às vezes precisamos verificar se um e-mail possui um domínio válido e se esse domínio possui registros MX bem configurados.
Isso pode ser usado para muitas propostas, como validações de e-mail antes do envio do formulário, evitando taxas de rejeição antes de enviar um e-mail para AWS SES, SendGrid ou outro provedor de e-mail, limpando banco de dados antigo de CRM com validação primária, etc.
O que este aplicativo faz?
O aplicativo pergunta qual e-mail você deseja verificar os registros MX
Em seguida, ele executa a pesquisa DNS MX e mostra todos os servidores de e-mail com cada preferência de servidor (prioridade)
Depois de tudo, pergunta se você deseja executar o aplicativo novamente ou se deseja sair do programa
Pilha e principais tópicos do projeto
Sobre o autor e licença
- Erick é desenvolvedor e arquiteto de back-end sênior.
- Você pode entrar em contato com Erick pelo e-mail [email protected] ou Linkedin https://www.linkedin.com/in/seixaserick/
- Outros repositórios Github: https://github.com/seixaserick/
- Licença MIT (verifique LICENSE.txt para mais detalhes)
Como executar este projeto
Clonar o repositório
Se você já instalou o Git para Windows, execute os comandos abaixo:
git clone https://github.com/seixaserick/dotnet-dns-mx-lookup
cd dotnet-dns-mx-lookup
Como executar este projeto em contêineres Docker
Se você já instalou o Docker Desktop, basta seguir estas etapas abaixo
Criando uma imagem docker
Para criar uma imagem Docker, execute a linha de comando abaixo no prompt de comando do diretório do projeto:
docker build -t dotnet-dns-mx-lookup -f Dockerfile .
Executando o aplicativo em um contêiner docker
Para executar a imagem no contêiner Docker e interagir com ela, execute a linha de comando abaixo:
docker run -it --name=dotnet-dns-mx-lookup --restart=unless-stopped dotnet-dns-mx-lookup
Para parar o contêiner, execute a linha de comando abaixo:
docker stop dotnet-dns-mx-lookup
Para remover o contêiner (mesmo que esteja em execução), execute a linha de comando abaixo:
docker rm --force dotnet-dns-mx-lookup
Como construir e executar sem Docker (Windows)
Após clonar o repositório você pode abrir o projeto com o Visual Studio. Construa ou apenas depure pressionando F5
.
Para compilar e executar no Windows (é necessário Visual Studio)
Abra o arquivo de solução dotnet-dns-mx-lookup.sln
com seu Visual Studio e pressione F5
para executar o projeto!
Conclusões
- O protocolo DNS usa a porta 53 do protocolo UPD
- Um domínio de e-mail pode ter mais de um registro MX e você deve se comunicar com servidores de alta prioridade
- Os aplicativos Dotnet (console ou não) podem ser executados no sistema operacional Linux ou Windows.
- Docker é uma ótima ferramenta para executar projetos rapidamente sem se preocupar com dependências e configurações.
- C# é muito semelhante a outras linguagens baseadas em ECMA (Java, Javascript etc.)
- Os aplicativos de console são simples e fáceis de inserir e gerar dados.
- Bons arquivos Markdown README.md podem ajudar outros desenvolvedores a entender, clonar, executar e testar projetos.
Desafio de lição de casa
- Tente implementar uma função de validação de e-mail para retornar verdadeiro se um e-mail tiver pelo menos um domínio de servidor válido
- Tente classificar a lista de servidores DNS MX por preferência de servidor antes de imprimi-la no console.
- Tente verificar se o IP de cada servidor DNS é válido e chame suas portas TCP 25, 587 ou 465 (portas SMTP comuns). Dica: Use dotnet DNS nativo Uma consulta de registro para encontrar o IP do servidor (IPv4 ou IPv6) https://docs.microsoft.com/en-us/dotnet/api/system.net.dns?view=net-6.0
- Inspecione o código, aumente o tempo limite da consulta DNS e force uma desconexão da rede entre uma pesquisa de servidor DNS (desconecte sua placa Ethernet e wi-fi) para ver o que acontece. Tente implementar um tratamento de erros para erros de tempo limite. Você pode simular falha de DNS primário e DNS secundário retornando a consulta (após reconectar sua rede).
- Inspecione o conteúdo do Dockerfile para ver como o docker extrai imagens do hub de imagens
- Tente criar uma WebAPI e implementar um endpoint para verificar se um email é válido (https://my-api-server.com/api/[email protected]). Você pode usar isso em seu site para evitar que e-mails falsos (com domínios inválidos) entrem em contato com você enviando um formulário.
- Tente implementar um CACHE de registros MX de domínio usando cache de memória dotnet nativo ou cache distribuído REDIS.