使电子邮件地址a@b.c不通过验证

本文关键字:验证 电子邮件地址 a@b | 更新日期: 2023-09-27 17:51:20

我倾向于使用以下服务器端代码来验证电子邮件地址:

bool result = false;
try
{
    MailAddress emailAddress = new MailAddress(_EmailAddress);
    result = true;
}
catch (Exception)
{
}
return result;

以上是基于许多SO的帖子,包括这一个。我的不同之处在于,除了进行实际交付或在线检查之外,是否还有其他方法可以进一步改进明显无效的电子邮件地址:

电子邮件地址a@b.c通过了验证,并且在MimeKit作者提供的漂亮的简单验证器中也通过了验证。

虽然理论上这可能是一个有效的电子邮件地址,但实际上它不是。我唯一的选择是做某种形式的交付测试来进一步验证电子邮件地址吗?

或者有人有其他解决方案?

使电子邮件地址a@b.c不通过验证

如果没有DNS查找,您无法做到这一点。a@b.c通过邮件格式的RFC规则。

如果您想使用RegEx,您可以使用以下命令,对于a@b.c,该命令为false。

您需要使它与有效的当前域保持同步,如果没有检查,则无法保证它实际存在。

private static bool ValidEmail(string emailAddress) {
   var regex = new Regex(@"([a-z0-9][-a-z0-9_'+'.]*[a-z0-9])@([a-z0-9][-a-z0-9'.]*[a-z0-9]'.(arpa|root|aero|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|([0-9]{1,3}'.{3}[0-9]{1,3}))");
   return regex.IsMatch(emailAddress);
}