【发布时间】:2015-06-12 18:03:06
【问题描述】:
为了验证电子邮件地址,我们转发MailAddress Class。但是,根据 MailAddress 类,这个电子邮件 a@bbb..com 地址似乎是有效的。
MSDN 声明这是有效的电子邮件地址:
MailAddress 类支持以下邮件地址格式:
- user@host 的简单地址格式。如果未设置 DisplayName,则这是生成的邮件地址格式。
- “显示名称”的标准引用显示名称格式。如果设置了 DisplayName,则这是生成的格式。
- 在用户名和主机名周围添加尖括号,如果不包括这些,则为“显示名称”user@host。
- 如果未包含引号,则在 DisplayName 周围添加引号以表示显示名称。
- DisplayName 支持 Unicode 字符。财产。
- 带引号的用户名。例如,“用户名”@host。
- 用户名中的连续点和尾随点。例如,用户...名称..@host。
- 括起来的域文字。例如,。
- 评论。例如,(评论)“显示名称”(评论)(评论)。评论在传输前会被删除。
取自https://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress%28v=vs.110%29.aspx。
请注意,7 项目符号接近这个问题,但它表示连续的点可以出现在用户名中而不是域中。
http://isemail.info (http://isemail.info/a@bbb..com) 等其他资源指出这不是有效的电子邮件地址。
您认为正确的行为应该是什么?这是一个 poc。
//C# Example
var emailAddress = @"a@bbb..com";
Func<string,bool> validEmail = (email)=>
{
try
{
var address = new System.Net.Mail.MailAddress(email);
return true;
}catch (Exception ex)
{
return false;
}
};
Assert.IsTrue(validEmail(emailAddress));
//using NUnit.Framework
//O2Ref:nunit.framework.dll
【问题讨论】:
-
解析电子邮件地址很困难。
-
@DanielA.White 绝对:)
-
为什么不使用正则表达式?
-
从用户体验的角度解决了这个问题,方法是不非常严格地验证电子邮件地址,而是向该地址发送确认电子邮件。也许这种方法对您有用?
-
@MichaelHidalgo 没有确认邮件就无法进行电子邮件验证。您唯一可以在后端验证的是电子邮件是否具有有效的格式。虽然
a@a是一种有效格式 - 有强有力的证据表明此电子邮件不会通过验证电子邮件检查。
标签: c# validation email