检查该电子邮件地址是否对System.Net.Mail.MailAddress有效

Cur*_*urt 31 vb.net asp.net email-address email-validation asp.net-3.5

目前,为避免因无效的电子邮件地址而引发错误,我执行以下操作:

Dim mailAddress As MailAddress
Try
   mailAddress = New MailAddress("testing@invalid@email.com")
Catch ex As Exception
   'Invalid email
End Try
Run Code Online (Sandbox Code Playgroud)

但是,Try..Catch有没有一种方法可以验证电子邮件地址对该MailAddress类型是否100%有效?

我知道有很多用于验证电子邮件的正则表达式函数,但我正在寻找该MailAddress类型用于验证其地址的函数.

SLa*_*aks 32

不幸的是,没有MailAddress.TryParse办法.

您的代码是验证.Net中电子邮件地址的理想方式.

  • @Cromat - 因为RegEx以快速着称,对吧? (12认同)
  • @Cromat - 正确,一个_should not_使用流控制异常.但是人们还需要知道何时对此规则做出例外(没有双关语意). (4认同)
  • 我不同意这一点,我会假设在try/catch块上使用正则表达式,因为它们通常很慢. (2认同)
  • @Cromat:错了。正则表达式也很慢,并且任何复杂到足以近似某个电子邮件地址的正则表达式都非常慢。另外,`catch`块只有在确实捕获到异常的情况下才会变慢,因此在有效地址的常见情况下,这不会降低任何速度。 (2认同)
  • @Oded不,它们不是最快的东西,但是使用异常来控制应用程序流从来都不是一个好习惯. (2认同)

see*_*mal 8

最近,.NET API 通过 MailAddress.TryCreate 方法进行了扩展,可能会在未来的版本中出现,这将消除对常见 try-catch 样板的需要:https: //github.com/dotnet/runtime/commit/aea45f4e75d1cdbbfc60daae782d1cfeb700be02


小智 5

如果您需要确保给定的电子邮件地址符合IETF标准 - MailAddress该类似乎只是部分遵循,在撰写本文时 - 我建议您查看一下.NET组件EmailVerify.NET您可以轻松集成到您的解决方案中.它不依赖于正则表达式来执行其工作,但它依赖于内部有限状态机,因此速度非常快.

免责声明:我是该组件的主要开发人员.

  • 该组件不是免费组件 - 售价50美元. (5认同)