Поиск собственных DNS-серверов C# MX (без зависимостей)
Контекст
Иногда нам нужно проверить, имеет ли электронное письмо действительный домен и правильно ли настроены записи MX в этом домене.
Это можно использовать для многих предложений, таких как проверка электронной почты перед отправкой формы, избежание показателей отказов перед отправкой электронного письма в AWS SES, SendGrid или другой поставщик электронной почты, очистка старой базы данных CRM с первичной проверкой и т. д.
Что делает это приложение?
Приложение спрашивает, какой адрес электронной почты вы хотите подтвердить записи MX.
Затем он запускает поиск DNS MX и показывает все почтовые серверы с каждым предпочтением (приоритетом) сервера.
Alfer all, спрашивает, хотите ли вы снова запустить приложение или выйти из программы.
Стек и основные темы в проекте
Об авторе и лицензии
- Эрик — старший бэкэнд-разработчик и архитектор.
- Вы можете связаться с Эриком по электронной почте [email protected] или Linkedin https://www.linkedin.com/in/seixaserick/.
- Другие репозитории Github: https://github.com/seixaserick/.
- Лицензия MIT (более подробную информацию см. в файле LICENSE.txt)
Как запустить этот проект
Клонировать репозиторий
Если вы уже установили Git для Windows, выполните команды ниже:
git clone https://github.com/seixaserick/dotnet-dns-mx-lookup
cd dotnet-dns-mx-lookup
Как запустить этот проект в контейнерах Docker
Если вы уже установили Docker Desktop, просто выполните следующие действия:
Создание образа докера
Чтобы создать образ Docker, запустите командную строку ниже в командной строке каталога проекта:
docker build -t dotnet-dns-mx-lookup -f Dockerfile .
Запуск приложения в Docker-контейнере
Чтобы запустить образ в контейнере Docker и взаимодействовать с ним, выполните команду из командной строки ниже:
docker run -it --name=dotnet-dns-mx-lookup --restart=unless-stopped dotnet-dns-mx-lookup
Чтобы остановить контейнер, запустите командную строку ниже:
docker stop dotnet-dns-mx-lookup
Чтобы удалить контейнер (даже если он запущен), запустите командную строку ниже:
docker rm --force dotnet-dns-mx-lookup
Как собрать и запустить без Docker (Windows)
После клонирования репозитория вы можете открыть проект с помощью Visual Studio. Создайте или просто отладьте его, нажав F5
.
Чтобы скомпилировать и запустить его в Windows (требуется Visual Studio)
Откройте файл решения dotnet-dns-mx-lookup.sln
в Visual Studio, затем нажмите F5
, чтобы запустить проект!
Вынос
- Протокол DNS использует порт 53 протокола UPD.
- В домене электронной почты имеется более одной записи MX, и вам следует взаимодействовать с серверами с высоким приоритетом.
- Приложения Dotnet (консольные или нет) могут работать в ОС Linux или Windows.
- Docker — хороший инструмент для быстрого запуска проектов, не беспокоясь о зависимостях и конфигурациях.
- C# очень похож на другие языки на основе ECMA (Java, Javascript и т. д.).
- Консольные приложения просты и удобны для ввода и вывода данных.
- Хорошие файлы Markdown README.md могут помочь другим разработчикам понимать, клонировать, запускать и тестировать проекты.
Домашнее задание
- Попробуйте реализовать функцию проверки электронной почты, чтобы она возвращала true, если у электронной почты есть хотя бы один действительный домен сервера.
- Попробуйте отсортировать список серверов DNS MX по предпочтениям сервера, прежде чем распечатывать его на консоли.
- Попробуйте проверить, действителен ли IP-адрес каждого DNS-сервера, и вызвать его порты TCP 25, 587 или 465 (общие порты SMTP). Совет. Используйте собственный DNS-запрос dotnet A для определения IP-адреса сервера (IPv4 или IPv6) https://docs.microsoft.com/en-us/dotnet/api/system.net.dns?view=net-6.0
- Проверьте код, увеличьте тайм-аут DNS-запроса и принудительно отключите сеть между поиском одного DNS-сервера (отключите сетевую карту и Wi-Fi), чтобы посмотреть, что произойдет. Попробуйте реализовать обработку ошибок тайм-аута. Вы можете имитировать сбой основного DNS и возврат вторичного DNS запроса (после повторного подключения к сети).
- Проверьте содержимое Dockerfile, чтобы увидеть, как Docker извлекает изображения из концентратора изображений.
- Попробуйте создать WebAPI и реализовать конечную точку, чтобы проверить действительность электронного письма (https://my-api-server.com/api/[email protected]). Вы можете использовать это на своем веб-сайте, чтобы предотвратить возможность связи с вами по поддельным электронным письмам (с недействительными доменами) путем отправки формы.
- Попробуйте реализовать КЭШ записей MX домена, используя собственный кеш памяти dotnet или распределенный кеш REDIS.