我有关于使用MailAddress验证电子邮件的问题read,并生成了以下代码:
try
{
var address = new MailAddress(value.Email);
}
catch (FormatException)
{
emailError = "Invalid Email";
}
令我惊讶的是,字符串ndskfndlfk@sdflsdf
验证为好的电子邮件。
知道为什么会这样吗?
答案 0 :(得分:1)
如果您确实需要过滤这些电子邮件地址,可以使用找到的here小实用程序,它使用Regex验证电子邮件地址。请注意,这是.Net 4.0版本 - 它与4.5有点不同。
using System;
using System.Globalization;
using System.Text.RegularExpressions;
public class RegexUtilities
{
bool invalid = false;
public bool IsValidEmail(string strIn)
{
invalid = false;
if (String.IsNullOrEmpty(strIn))
return false;
// Use IdnMapping class to convert Unicode domain names.
strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper);
if (invalid)
return false;
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn,
@"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$",
RegexOptions.IgnoreCase);
}
private string DomainMapper(Match match)
{
// IdnMapping class with default property values.
IdnMapping idn = new IdnMapping();
string domainName = match.Groups[2].Value;
try {
domainName = idn.GetAscii(domainName);
}
catch (ArgumentException) {
invalid = true;
}
return match.Groups[1].Value + domainName;
}
}
否则,如果是用于用户注册,我通常只依赖于电子邮件验证 - 即系统向用户发送带有链接的电子邮件,然后单击该链接验证该电子邮件地址是真实的。
有效电子邮件地址可能不是真正的电子邮件地址。换句话说,它甚至可以通过一个完美的验证系统,但不能保证它存在。
答案 1 :(得分:1)
这可能不是有效的WWW域名,但在专用网络上我认为它是一个有效的域名。如果你想要更有选择性,那么Regex。
我尝试使用Regex解析合法电子邮件(消除垃圾邮件使用的虚假信息),这很麻烦。
如果您可以访问实际的电子邮件标题,那么它实际上并不容易,但它会更准确。