C# 本機 DNS MX 伺服器查找(無相依性)
情境
有時我們需要檢查電子郵件是否具有有效的網域以及該網域是否具有配置良好的 MX 記錄。
這可用於許多建議,例如在提交表單之前進行電子郵件驗證,在向 AWS SES、SendGrid 或其他電子郵件提供者發送電子郵件之前避免退回率,透過主要驗證清理舊的 CRM 資料庫等。
這個應用程式有什麼作用?
該應用程式會詢問您要驗證 MX 記錄的電子郵件地址
然後,它運行 DNS MX 查找並顯示所有郵件伺服器以及每個伺服器首選項(優先順序)
Alfer all,詢問您是否要再次運行該應用程式或是否要退出該程序
專案中的堆疊和主要主題
.NET 6.0 控制台應用程式
- C#
- UDP協定通訊
- 控制台輸入、輸出和清理
- DNS MX協定標準使用
碼頭工人
- 碼頭工人建構
- 碼頭運行
- docker 容器 bash 互動(來自 docker 的主機 shell)
關於作者和許可
- Erick是一位資深後端開發人員和架構師。
- 您可以透過電子郵件 [email protected] 或 Linkedin https://www.linkedin.com/in/seixaserick/ 聯絡Erick
- 其他 Github 儲存庫:https://github.com/seixaserick/
- MIT 許可證(請查看 LICENSE.txt 以了解更多詳細資訊)
如何運行這個項目
克隆儲存庫
如果您已經安裝了 Windows 版 Git,請執行下列命令:
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 作業系統中運行。
- Docker 是一個很好的工具,可以快速運行項目,而無需擔心依賴項和配置。
- C# 與其他基於 ECMA 的語言(Java、Javascript 等)非常相似
- 控制台應用程式簡單且易於輸入和輸出資料。
- 好的 Markdown README.md 檔案可以幫助其他開發人員理解、複製、運行和測試專案。
家庭作業挑戰
- 嘗試實現電子郵件驗證功能,如果電子郵件至少有一個有效的伺服器網域,則傳回 true
- 在控制台上列印之前,請嘗試按伺服器首選項對 DNS MX 伺服器清單進行排序。
- 嘗試檢查每個 DNS 伺服器 IP 是否有效,並呼叫其 TCP 25、587 或 465 連接埠(常見 SMTP 連接埠)。提示:使用本機 dotnet DNS 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])。您可以在您的網站中使用此功能來防止虛假電子郵件(具有無效網域)透過提交表單與您聯絡。
- 嘗試使用本機 dotnet 記憶體快取或 REDIS 分散式快取來實作網域 MX 記錄 CACHE。