You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何System.Net.Mail.MailAddress构造函数允许解析含斜杠的域名邮箱?

为什么MailAddress允许包含斜杠的域名而不抛出FormatException?

这个问题的核心在于.NET的MailAddress类的校验定位:它仅负责校验邮件地址的格式是否符合邮件地址的通用规范(RFC 5322),并不会去验证域名是否符合DNS的严格规则。

具体拆解一下原因:

  • 你的代码里的地址username@domain/domain.com,MailAddress会把@后的domain/domain.com完整识别为主机部分。RFC 5322定义的邮件地址格式,并没有强制要求主机部分必须是合法的DNS域名——毕竟早期邮件系统还存在非DNS的寻址方式(比如X.400地址),所以规范留了灵活性。
  • MailAddress的构造函数只做语法结构校验:比如检查地址是否有且仅有一个@分隔符,本地部分和主机部分的基本字符语法是否合规,但不会去校验主机名是否符合DNS的字符限制(比如DNS明确禁止斜杠/这类字符)。
  • 真正的域名有效性校验,是在你尝试通过SMTP服务器发送邮件的时候才会发生——SMTP服务器会去解析这个主机名是否存在、是否可达,但MailAddress本身只负责解析和存储地址的格式,不做实际的可用性校验。

甚至你还可以创建带方括号的「域字面量」格式地址,比如new MailAddress("test@[domain/domain.com]"),这在RFC 5322里是明确允许的格式,而不带方括号的宽松解析,也是.NET为了兼容一些历史场景或非标准实现所做的设计。

内容的提问来源于stack exchange,提问作者Martin Obrátil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:00:51