C# 本机 DNS MX 服务器查找(无依赖项)
![C# 原生 DNS MX 查找工具 Project Cover](https://images.downcodes.com/uploads/20250105/img_677a4ec1c696f30.png)
语境
有时我们需要检查电子邮件是否具有有效的域以及该域是否具有配置良好的 MX 记录。
这可用于许多建议,例如在提交表单之前进行电子邮件验证,在向 AWS SES、SendGrid 或其他电子邮件提供商发送电子邮件之前避免退回率,通过主要验证清理旧的 CRM 数据库等。
这个应用程序有什么作用?
该应用程序会询问您要验证 MX 记录的电子邮件地址
然后,它运行 DNS MX 查找并显示所有邮件服务器以及每个服务器首选项(优先级)
Alfer all,询问您是否要再次运行该应用程序或是否要退出该程序
![应用程序运行 Project Cover](https://images.downcodes.com/uploads/20250105/img_677a4ec1c98d131.png)
项目中的堆栈和主要主题
.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 容器中运行应用程序
![具有容器运行和 CLI 访问权限的 Docker Desktop container running](https://images.downcodes.com/uploads/20250105/img_677a4ec1c9e1432.png)
要在 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。