C# ネイティブ DNS MX サーバー ルックアップ (依存関係なし)
コンテクスト
場合によっては、電子メールに有効なドメインがあるかどうか、およびこのドメインに適切に構成された MX レコードがあるかどうかを確認する必要があります。
これは、フォーム送信前の電子メール検証、AWS SES、SendGrid、または別の電子メールプロバイダーに電子メールを送信する前の直帰率の回避、プライマリ検証による CRM の古いデータベースの消去など、多くの提案に使用できます。
このアプリケーションは何をするものですか?
アプリは、MX レコードを検証する電子メールを尋ねます
次に、DNS MX ルックアップを実行し、すべてのメール サーバーを各サーバー設定 (優先度) で表示します。
すべて、アプリを再度実行するか、プログラムを終了するかを尋ねます
プロジェクトのスタックと主要なトピック
.NET 6.0コンソールアプリケーション
- C#
- UDPプロトコル通信
- コンソールの入力、出力、およびクリーニング
- DNS MX プロトコルの標準的な使用法
ドッカー
- ドッカービルド
- ドッカーラン
- docker コンテナ bash インタラクション (docker のホスト シェルから)
作者とライセンスについて
- Erickは上級バックエンド開発者兼アーキテクトです。
- Erickには、電子メール[email protected] または Linkedin https://www.linkedin.com/in/seixaserick/ で連絡できます。
- その他の Github リポジトリ: https://github.com/seixaserick/
- MIT ライセンス (詳細については、LICENSE.txt を確認してください)
このプロジェクトの実行方法
リポジトリのクローンを作成する
すでに Git for Windows をインストールしている場合は、以下のコマンドを実行します。
git clone https://github.com/seixaserick/dotnet-dns-mx-lookup
cd dotnet-dns-mx-lookup
このプロジェクトを Docker コンテナーで実行する方法
すでに Docker Desktop をインストールしている場合は、以下の手順に従ってください。
Docker イメージの作成
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 が必要)
Visual Studio でソリューション ファイルdotnet-dns-mx-lookup.sln
を開き、 F5
を押してプロジェクトを実行します。
テイクアウト
- DNS プロトコルは UPD プロトコルのポート 53 を使用します
- 電子メール ドメインには複数の MX レコードがある可能性があるため、優先度の高いサーバーと通信する必要があります
- Dotnet アプリ (コンソールかどうかに関係なく) は、Linux または Windows OS で実行できます。
- Docker は、依存関係や構成を気にせずにプロジェクトを迅速に実行できる優れたツールです。
- C# は、他の ECMA ベースの言語 (Java、JavaScript など) と非常によく似ています。
- コンソール アプリはシンプルでデータの入出力が簡単です。
- 優れた Markdown README.md ファイルは、他の開発者がプロジェクトを理解、複製、実行、テストするのに役立ちます。
宿題チャレンジ
- 電子メールに少なくとも 1 つの有効なサーバー ドメインがある場合に true を返す電子メール検証関数を実装してみてください。
- コンソールに印刷する前に、DNS MX サーバーのリストをサーバー設定で並べ替えてみてください。
- 各 DNS サーバーの IP が有効であるかどうかを確認し、その TCP 25、587、または 465 ポート (一般的な SMTP ポート) を呼び出してみます。ヒント: ネイティブ ドットネット DNS A レコード クエリを使用してサーバーの IP (IPv4 または IPv6) を検索します https://docs.microsoft.com/en-us/dotnet/api/system.net.dns?view=net-6.0
- コードを検査し、DNS クエリのタイムアウトを増やし、1 つの DNS サーバー検索間のネットワークを強制的に切断して (イーサネット カードと Wi-Fi を取り外します)、何が起こるかを確認します。タイムアウトエラーに対するエラー処理を実装してみます。プライマリ DNS が失敗し、セカンダリ DNS がクエリを返す (ネットワークを再接続した後) ことをシミュレートできます。
- Dockerfile コンテンツを調べて、Docker がイメージのハブからイメージをプルする方法を確認します。
- WebAPI を作成し、電子メールが有効かどうかを確認するエンドポイントを実装してみます (https://my-api-server.com/api/[email protected])。これを Web サイトで使用すると、フォーム送信によって偽の電子メール (無効なドメインを含む) が連絡するのを防ぐことができます。
- ネイティブ ドットネット メモリ キャッシュまたは REDIS 分散キャッシュを使用して、ドメイン MX レコード キャッシュを実装してみてください。