以下电子邮件格式无效
fulya_42_@hotmail.coö
但是到目前为止我用c#找到和尝试的所有验证都说这是正确的电子邮件,而不是
如何使用c#4.5.2验证电子邮件是否有效?谢谢
好的更新问题
我要问的原因是当您尝试通过电子邮件发送此地址时,最大的电子邮件服务mandrill api会引发内部服务器错误
所以他们必须在尝试发送电子邮件之前使用某种验证。我的目标是在尝试谢谢之前找到他们用来消除此类电子邮件的内容
答案 0 :(得分:0)
使用Regex
string emailID = "fulya_42_@hotmail.coö";
bool isEmail = Regex.IsMatch(emailID, @"\A(?:[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)\Z");
if (isEmail)
{
Response.Write("Valid");
}
答案 1 :(得分:0)
从https://msdn.microsoft.com/en-us/library/01escwtf(v=vs.110).aspx
检查以下课程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.
try {
strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200));
}
catch (RegexMatchTimeoutException) {
return false;
}
if (invalid)
return false;
// Return true if strIn is in valid e-mail format.
try {
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][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException) {
return false;
}
}
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;
}
}
或者在这里查看@Cogwheel答案C# code to validate email address
答案 2 :(得分:0)
可以使用以下内容匹配电子邮件地址的正则表达式:
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);
参考MSDN
但在你的情况下:
fulya_42_@hotmail.coö
如果您正在检查“.coo
”中根据您的观察无效的电子邮件地址的有效性,它将不会显示任何错误,因为正则表达式不会验证,因此您必须手动添加一些您接受的域名如:gmail.com,yahoo.com等。
在SonerGonul提出的问题评论中正确地说了
由于
答案 3 :(得分:0)
首先,您提供的电子邮件地址采用有效的格式。 - 如果您愿意,您可以更进一步验证域名是否有效;但无论哪种方式,您都应该验证所有权,在这种情况下,您将知道电子邮件地址和域名是有效的。
其次,您应该不使用Regex验证电子邮件地址;电子邮件地址验证是内置于.NET框架的,你不应该为这样的东西重新创建轮子。
执行两项检查的简单验证函数如下所示:
public static bool IsValidEmailAddress(string emailAddress, bool verifyDomain = true)
{
var result = false;
if (!string.IsNullOrWhiteSpace(emailAddress))
{
try
{
// Check Format (Offline).
var addy = new MailAddress(emailAddress);
if (verifyDomain)
{
// Check that a valid MX record exists (Online).
result = new DnsStubResolver().Resolve<MxRecord>(addy.Host, RecordType.Mx).Any();
}
else
{
result = true;
}
}
catch (SocketException)
{
result = false;
}
catch (FormatException)
{
result = false;
}
}
return result;
}
要运行代码,您需要安装MX记录查找*所需的NuGet包ARSoft.Tools.Net
,并且您需要为所使用的各种类添加适当的使用声明(应该很漂亮)这些天在VisualStudio中自动完成。)
(*:仅通过System.Net.Dns.GetHost*
检查有效的主机名是不够的,因为对于某些只有MX条目的域,例如admin@fubar.onmicrosoft.com
等,这会给你一些误报。 )