36

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

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

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

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

4

6 回答 6

39

不幸的是,没有MailAddress.TryParse方法。

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

于 2011-08-11T14:46:47.047 回答
5

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

免责声明:我是该组件的首席开发人员。

于 2011-08-17T09:08:15.647 回答
3

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

于 2020-03-12T10:47:22.473 回答
1

本身并不是这个问题的真正答案,但如果有人需要它,我编写了一个 C# 函数来使用这种方法验证电子邮件地址。

FixEmailAddress("walter@xyz.com")

返回"walter@xyz.com"

FixEmailAddress("wa@lter@xyz.com,tom@xyz.com,asdfdsf,vsav-sdfsd@xyz.xyz")

返回"tom@xyz.com,vsav-sdfsd@xyz.xyz"

我以这种方式处理电子邮件地址列表,因为逗号分隔的电子邮件列表是 MailAddressCollection.Add() 的有效参数

/// <summary>
/// Given a single email address, return the email address if it is valid, or empty string if invalid.
/// or given a comma delimited list of email addresses, return the a comma list of valid email addresses from the original list.
/// </summary>
/// <param name="emailAddess"></param>
/// <returns>Validated email address(es)</returns>  
public static string FixEmailAddress(string emailAddress)
{

   string result = "";

    emailAddress = emailAddress.Replace(";",",");
   if (emailAddress.Contains(","))
   {
       List<string> results = new List<string>();
       string[] emailAddresses = emailAddress.Split(new char[] { ',' });
       foreach (string e in emailAddresses)
       {
           string temp = FixEmailAddress(e);
           if (temp != "")
           {
               results.Add(temp);
           }
       }
       result = string.Join(",", results);
   }
   else
   {

       try
       {
           System.Net.Mail.MailAddress email = new System.Net.Mail.MailAddress(emailAddress);
           result = email.Address;
       }
       catch (Exception)
       {
           result = "";
       }

   }

   return result;

}

于 2013-06-11T15:43:14.870 回答
1

MS 还提供了基于正则表达式的电子邮件验证器的代码: https ://msdn.microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

于 2015-09-08T08:34:37.900 回答
0

有些字符在某些服务提供商中有效,但在其他服务提供商中无效!对SmtpClient服务提供商一无所知。所以它必须尽可能少地过滤。维基百科很好地提到了立场。

MSDNMailAddress上提到了Validation 。因此,我认为您可以在初始化.MailAddress

于 2011-08-11T15:42:42.993 回答