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

标签 c# email email-validation

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

最佳答案

这个呢?

bool IsValidEmail(string email)
{
    var trimmedEmail = email.Trim();

    if (trimmedEmail.EndsWith(".")) {
        return false; // suggested by @TK-421
    }
    try {
        var addr = new System.Net.Mail.MailAddress(email);
        return addr.Address == trimmedEmail;
    }
    catch {
        return false;
    }
}

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


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

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

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

对于大多数用例,错误的“无效”比错误的“有效”对您的用户和 future 的证明要糟糕得多。这是一个 article that used to be the accepted answer对这个问题(该答案已被删除)。它有更多的细节和一些关于如何解决问题的其他想法。

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


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

此外,如果您对电子邮件地址执行任何其他操作,可能需要将其转换为 MailAddress。即使您不使用这个确切的功能,您也可能想要使用相同的模式。您还可以通过捕获 different exceptions 来检查特定类型的故障。 : null、空或无效格式。


--- 进一步阅读 ---

Documentation for System.Net.Mail.MailAddress

Explanation of what makes up a valid email address

关于用于验证电子邮件地址的 C# 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1365407/

相关文章:

c# - 在 asp.net core 的构建后事件中运行 dotnet publish

node.js - Sendgrid send_at nodejs

java - 如何使用java验证电子邮件地址?

facebook - Omniauth-facebook 和设计 : if email exists

java - Java 中的电子邮件验证不使用正则表达式

c# - 将 Outlook 联系人获取到基于 C# 表单的应用程序中

c# - 追踪黑客/恶意软件企图

c# - 如何以编程方式 (C#) 从 POP3 邮件中获取附件?

c# - 使用 Microsoft.Jet.OLEDB.4.0 连接导入 Excel 表时出错

JavaMail 詹姆斯服务器 : Email is marked as spam