.net - 如何使用.NET Framework验证电子邮件地址格式?

标签 .net vb.net validation email

我想要一个函数来测试字符串是否像电子邮件地址一样格式化。

.NET框架内置的功能是什么?

这有效:

Function IsValidEmailFormat(ByVal s As String) As Boolean
    Try
        Dim a As New System.Net.Mail.MailAddress(s)
    Catch
        Return False
    End Try
    Return True
End Function

但是,有没有更优雅的方法?

最佳答案

不要为自己的验证而烦恼。 .NET 4.0通过 MailAddress 类大大改善了验证。只需使用MailAddress address = new MailAddress(input),如果抛出,则无效。如果您的输入有任何可能的解释为符合RFC 2822的电子邮件地址规范,它将对此进行解析。上面的正则表达式,甚至是MSDN文章中的正则表达式,都是错误的,因为它们没有考虑显示名称,带引号的本地部分,域的域文字值,本地部分的正确点原子规范,邮件地址可以放在尖括号中,用于显示名称的多个带引号的字符串值,转义字符,在显示名称中的unicode,注释以及最大有效邮件地址长度。我花了三周的时间为System.Net.Mail在.NET 4.0中重新编写了邮件地址解析器,并相信我,这比仅仅提出一些正则表达式要困难得多,因为存在很多边缘情况。 .NET 4.0 beta 2中的MailAddress类将具有此改进的功能。

还有一件事,您唯一可以验证的是邮件地址的格式。如果不向该地址发送电子邮件并查看服务器是否接受该电子邮件地址,则无法验证该电子邮件地址实际上对于接收电子邮件有效。这是不可能的,尽管您可以向邮件服务器提供SMTP命令以尝试对其进行验证,但很多时候这些命令将被禁用或返回不正确的结果,因为这是垃圾邮件发送者查找电子邮件地址的常用方法。

关于.net - 如何使用.NET Framework验证电子邮件地址格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1331084/

相关文章:

php - 当特定规则失败时在重定向后执行操作 - Laravel 验证

java - Hibernate @NotNull(仅当另一个属性不为空时?)

angular - 如何将 Angular 表单验证与 ngFor 绑定(bind)

c# - 编译表达式树给出与等效代码不同的结果

c# - ASP.NET web.config 中 SQL Server native 客户端的连接字符串

c# - 一段时间后重新连接到 QueueManager 时,在 MQ 客户端 (C#) 上收到错误原因代码 2059

mysql .net 连接器撇号问题

.net - 清洗请求防止SQL注入(inject)攻击

c# - 在运行时添加控件的最佳实践

c# - 为什么 Windows 7 无法从我使用 DotNetZip 创建的受密码保护的 zip 文件中提取文件?