一尘不染

C#代码验证电子邮件地址

c#

验证字符串是有效电子邮件地址的最优雅的代码是什么?


阅读 487

收藏
2020-05-19

共1个答案

一尘不染

那这个呢?

bool IsValidEmail(string email)
{
    try {
        var addr = new System.Net.Mail.MailAddress(email);
        return addr.Address == email;
    }
    catch {
        return false;
    }
}

为了澄清,问题是询问特定字符串是否是电子邮件地址的有效表示,而不是电子邮件地址是否是发送消息的有效目的地。为此,唯一的真实方法是发送消息进行确认。

请注意,电子邮件地址比您最初可能想象的要宽容得多。这些都是完全有效的形式:

  • 齿轮@车轮
  • “橙色的齿轮” @ example.com
  • 123@$.xyz

在大多数情况下,对于用户和以后的证明,错误的“无效”要比错误的“有效”严重得多。这是一篇曾经是该问题的公认答案文章(该答案已被删除)。它具有更多详细信息以及有关如何解决问题的其他一些想法。

提供健全性检查仍然是用户体验的一个好主意。假设电子邮件地址有效,则可以查找已知的顶级域,检查该域的MX记录,检查常见域名(gmail.cmo)的拼写错误,等等。然后向用户显示警告有机会说“是的,我的邮件服务器确实允许🌮🍳🎁作为电子邮件地址。”


至于将异常处理用于业务逻辑,我同意这是要避免的事情。但这是方便和清晰可能超过教条的情况之一。

此外,如果您对电子邮件地址进行任何其他操作,则可能涉及将其转换为MailAddress。即使您不使用此确切功能,您也可能希望使用相同的模式。您还可以通过捕获不同的异常来检查特定类型的故障:空,空或无效格式。


根据Stuart的评论,此操作会将最终地址与原始字符串进行比较,而不是始终返回true。MailAddress尝试将带有空格的字符串解析为“显示名称”和“地址”部分,因此原始版本返回的是误报。


-–进一步阅读—

System.Net.Mail.MailAddress的文档

组成有效电子邮件地址的说明

2020-05-19