ac#winforms应用程序中的电子邮件validation

您好我如何在c#winforms中validation电子邮件?

您可以使用正则表达式来validation电子邮件地址:

RegEx reg=new RegEx(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[AZ]{2,6}$", RegexOptions.IgnoreCase); ///Object initialization for Regex if(reg.IsMatch("email string")) //valid email 

最好的方法是将此validation任务转发给.NET本身:

 public bool IsValidEmailAddress (string email) { try { MailAddress ma = new MailAddress (email); return true; } catch { return false; } } 

当然,它会在某些技术上有效的电子邮件地址(例如非拉丁字符)中引发误报,但由于无论如何它都无法发送到这些地址,您也可以从一开始就过滤它们。

此页面具有匹配电子邮件地址的正常表达式。

请记住,这只是一个正式的检查。 要检查电子邮件地址是否确实存在,您必须向该地址发送实际电子邮件并检查邮件服务器的响应。

即使成功,SMTP服务器也可能配置为忽略无效的收件人地址。

如果要validation地址格式,则应该使用正则表达式。 有成千上万的例子,所以我会让你找到并挑选最好的一个。

如果要validation地址是否存在, 本文将提供有关如何执行此操作的一些指示,而不提供任何特定的代码示例。

您可以使用正则表达式来validation它。 有各种各样的不同,但我使用的更全面的很长,如图所示

最好的方法是在’@’将其拆分为两个,并分别validation邮箱部分和域部分。 我知道有一些注册表,但这些可能会很快变得复杂。

RFC2822的 3.4节完全定义了一个有效的电子邮件地址:查找addr-specdot-atom addr-spec

本质上,邮箱部分是一个或多个字符的字符串,可以是字母数字,也可以是!,#,$,%,&,’,*,+, – ,/,=?,^,_,`,{ ,|,},〜和一个完整的’。’。 域部分遵循类似的规则。

鉴于灵活性,最简单的方法可能只是一个字符串检查,说它有一个单独的’@’,然后单独检查邮箱和域部分,看看它们是否包含不在上面的集合中的字符。 无论是使用正则表达式还是其他方式执行,都是您自己的选择。

我使用了来自客户端validation的JQuery插件的Regex:

  public static bool ValidEmail(string email) { var regex = new Regex( 

@“^((([az] | \ d | [!#\ $%&’* + – / = \?\ ^ {\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([az]|\d|[!#\$%&'\*\+\-\/=\?\^_ {\ |}〜] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])+)*)|((\ X22)((((\ X20 | \ X09)*(\ X0D \ X0A))?(\ X20 | \ X09) ?+)((\ x01- \ X08 \ X0B \ X0C \ x0e- \ X1F \ 0x7F部分] | \ X21 | [\ x23- \ x5b] | [\ x5d- \ x7e] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])|(\([\ x01- \ X09 \ X0B \ X0C \ x0d- \ 0x7F部分] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) )))*(((\ X20 | \ X09)*(\ X0D \ X0A))(\ X20 |?\ X09)+)(\ X22)))@((([AZ] |?\ d | [ \ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])|(([AZ] | \ d | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])([AZ] | \ d | – |。| |〜| [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) ([az] | \ d | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]))))+(([AZ] |。[\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])|(([AZ] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])([az] | \ d | – |。| _ |〜| [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) ([az] | [\ u00A0 – \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])))。?$“,RegexOptions.Compiled);

  return regex.IsMatch(email); } 

使用Chris的文章,我为字符串创建了一个扩展方法,它将一个DNSLookup库连接在一起(信用给予Bill Andreozzi,来源为billandr@towncompass.com),Tom Janssens提供的最小Telnet实现( http:// www。 corebvba.be )和我自己的RegEx来validation电子邮件地址:

 ///  /// The regular expression to test the string against. ///  private static readonly Regex validEmailRegex = new Regex( @"^(([^<>()[\]\\.,;:\s@\""]+" + @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@" + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+" + @"[a-zA-Z]{2,}))$", RegexOptions.Compiled); ///  /// Determines whether the specified string is a valid email address. ///  ///  /// The string to validate. ///  ///  /// true if the specified string is a valid email address; /// otherwise, false. ///  public static bool IsValidEmailAddress(this string value) { if (!validEmailRegex.IsMatch(value)) { return false; } var mailServer = new DNS().LookupMX(value.Split('@')[1]); if (!mailServer.MoveNext()) { return false; } var telnet = new TelnetConnection(((DNS_MX_DATA)((DNS_WRAPPER)mailServer.Current).dnsData).pNameExchange, 25); try { if (!TelnetCompare(telnet.Read(), "220")) { return false; } telnet.WriteLine("helo hi"); if (!TelnetCompare(telnet.Read(), "250")) { return false; } telnet.WriteLine("mail from: " + value); if (!TelnetCompare(telnet.Read(), "250")) { return false; } telnet.WriteLine("rcpt to: " + value); if (!TelnetCompare(telnet.Read(), "250")) { return false; } } finally { telnet.WriteLine("quit"); } return true; } ///  /// Compares two strings for length and content from the Telnet stream. ///  /// The input string. /// The desired response. /// true if the response is the first characters if the input, /// false otherwise private static bool TelnetCompare(string input, string response) { if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(response)) { return false; } if (input.Length < response.Length) { return false; } return string.CompareOrdinal(input.Substring(0, response.Length), response) == 0; } 
 private void textBox1_Validating(object sender, CancelEventArgs e) { System.Text.RegularExpressions.Regex rEMail = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"); if (textBox1.Text.Length > 0) { if (!rEMail.IsMatch(textBox1.Text)) { MessageBox.Show("E-Mail expected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox1.SelectAll(); e.Cancel = true; } } } 

正则表达式reg =新的正则表达式(@“\ w +([ – +。] \ w +) @ \ w +([ – 。] \ w +) 。\ w +([ – 。] \ w +)*”);

///正则表达式的对象初始化

  if (!reg.IsMatch(email.Text.Trim())) { errorProvider1.SetError(email, "Please provide a valid Email Address"); email.Focus(); return; } 

确保使用命名空间System.Text.RegularExpression