目前,为避免因电子邮件地址无效而引发错误,我执行以下操作:
Dim mailAddress As MailAddress
Try
mailAddress = New MailAddress("testing@invalid@email.com")
Catch ex As Exception
'Invalid email
End Try
但是,有没有一种方法可以验证电子邮件地址是否对Try..Catch
类型100%有效?
我知道有很多用于验证电子邮件的正则表达式函数,但我正在寻找MailAddress
类型用于验证其地址的函数。
答案 0 :(得分:32)
不幸的是,没有MailAddress.TryParse
方法。
您的代码是验证.Net中电子邮件地址的理想方式。
答案 1 :(得分:5)
如果您需要确保某个给定的电子邮件地址符合IETF标准 - MailAddress
类似乎只是部分遵循,在撰写本文时,我建议您先看一下 EmailVerify.NET ,一个可以轻松集成到解决方案中的.NET组件。它不依赖于正则表达式来执行其工作,但它依赖于内部有限状态机,所以它非常快。
免责声明:我是该组件的首席开发人员。
答案 2 :(得分: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;
}
答案 3 :(得分:1)
MS还提供基于正则表达式的电子邮件验证程序的代码: https://msdn.microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
答案 4 :(得分:0)
某些字符在某些服务提供商中有效,但在其他服务提供商中则不一样! SmtpClient
对服务提供商一无所知。所以它必须尽可能地过滤。 Wikipedia很好地提到了标准。
MSDN上提到了MailAddress
的验证。因此,我认为您可以在初始化MailAddress
之前检查这些验证。
答案 5 :(得分:0)
最近,.NET API已通过MailAddress.TryCreate方法进行了扩展,该方法可能会在将来的版本中提供,这将消除对常见的try-catch样板的需求: https://github.com/dotnet/runtime/commit/aea45f4e75d1cdbbfc60daae782d1cfeb700be02