为什么 MailAddress 认为“john@gmail”。是一个有效的电子邮件地址吗?

Vin*_*nzz 6 c# email-validation mailaddress

像一个优秀的 C# 用户一样,我使用该MailAddress对象来验证电子邮件地址。

我的一个客户输入john@gmail.了他的电子邮件,经过验证MailAddress,并破坏了我的软件。我希望下面的代码抛出异常,但事实并非如此。

static void Main(string[] args)
{
    string addressmail = string.Empty;

    try
    {
        MailAddress mail = new MailAddress(@"john@gmail.");
        addressmail = mail.Address;
    }
    catch (FormatException)
    {
        // address is invalid
    }

    // address is valid
    Console.WriteLine(addressmail);
}
Run Code Online (Sandbox Code Playgroud)

你知道如何捕捉这种虚假的邮件地址吗?

Dan*_*l B 4

我认为在这种情况下,MS 对有效电子邮件地址的实现是不正确的,至少按照RFC822是这样。我实际上没有尝试过你的代码,所以我假设它按照你所说的那样进行。

还有其他方法可以验证电子邮件地址,例如实际连接到 SMTP 服务器并要求其确认该地址是否有效(如此处此处所述)。如果不这样做,你总会遇到一些麻烦。就我个人而言,我认为不值得花费太多时间根据某些规范来验证电子邮件地址(超出我们可以使用的快速检查;例如您的代码) - 真正的测试是该地址是否收到电子邮件如果你发送它。简单的电子邮件验证可以确认这一点,尽管我知道它可能并不适合所有情况,但在这些情况下,你运气不好。