c#winforms应用程序中的电子邮件验证
嗨,我如何在c#winforms中验证电子邮件?有一个匹配电子邮件地址的良好正则表达式 记住这只是一张正式支票。要检查电子邮件地址是否确实存在,您必须向该地址发送实际电子邮件,并检查邮件服务器的响应c#winforms应用程序中的电子邮件验证,c#,winforms,validation,C#,Winforms,Validation,嗨,我如何在c#winforms中验证电子邮件?有一个匹配电子邮件地址的良好正则表达式 记住这只是一张正式支票。要检查电子邮件地址是否确实存在,您必须向该地址发送实际电子邮件,并检查邮件服务器的响应 即使成功,SMTP服务器也可能被配置为忽略无效的收件人地址。您可以使用正则表达式对其进行验证。有各种不同的格式,但我使用的更全面的格式相当长,如图所示您可以使用正则表达式验证电子邮件地址: RegEx reg=new RegEx(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z
即使成功,SMTP服务器也可能被配置为忽略无效的收件人地址。您可以使用正则表达式对其进行验证。有各种不同的格式,但我使用的更全面的格式相当长,如图所示您可以使用正则表达式验证电子邮件地址:
RegEx reg=new RegEx(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$", RegexOptions.IgnoreCase); ///Object initialization for Regex
if(reg.IsMatch("email string"))
//valid email
/// <summary>
/// The regular expression to test the string against.
/// </summary>
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);
/// <summary>
/// Determines whether the specified string is a valid email address.
/// </summary>
/// <param name="value">
/// The string to validate.
/// </param>
/// <returns>
/// <c>true</c> if the specified string is a valid email address;
/// otherwise, <c>false</c>.
/// </returns>
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;
}
/// <summary>
/// Compares two strings for length and content from the Telnet stream.
/// </summary>
/// <param name="input">The input string.</param>
/// <param name="response">The desired response.</param>
/// <returns>true if the response is the first characters if the input,
/// false otherwise</returns>
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;
}
如果要验证地址格式,可能应该使用正则表达式。有成千上万的例子,所以我会让你找到并挑选最好的一个
如果要验证某个地址是否存在,请提供一些有关如何进行验证的指针,而不提供任何特定的代码示例。最好的方法是在“@”处将其拆分为两个,并分别验证邮箱部分和域部分。我知道有一些reg-ex的浮动,但这些可能会很快变得复杂 的第3.4节完全定义了有效的电子邮件地址:查找
addr spec
和dot atom
的规范
实际上,邮箱部分是一个由一个或多个字符组成的字符串,这些字符可以是字母数字,也可以是!、#、$、%、&、*、+、-、/、=?、^、、`、,{,|,},~还有一个句号“.”。域部分遵循类似的规则
考虑到灵活性,最简单的方法可能是简单地进行字符串检查,确定它是否有一个“@”,然后分别检查邮箱和域部分,查看它们是否包含不在上述集合中的字符。这是使用regexp还是其他方式执行是您自己的选择。最好的方法是将此验证任务转发给.NET本身:
public bool IsValidEmailAddress (string email)
{
try
{
MailAddress ma = new MailAddress (email);
return true;
}
catch
{
return false;
}
}
诚然,它会对一些技术上有效的电子邮件地址(例如,使用非拉丁字符)发出误报,但由于它无论如何都无法发送到这些地址,您也可以从一开始就将其过滤掉。我使用了JQuery插件中的正则表达式,该插件在客户端进行验证:
public static bool ValidEmail(string email)
{
var regex = new Regex(
@(a-z[a-a-z[[a-a-z[[[a-a-z[[a-a-z[[[a-a-z[[[a-a-z[[a-z[[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-a-z[[[[a-a-a-z]除除除除除除除除除除除除除除除除除除除除除除上述上述上述上述上述上述上述两两两两个州州州]]]]]]]]]]]]及///以下以下以下以下以下以下以下::::::::::::::::^<<<<<<<<<<<<<代码<<<本本州州州州际际际际际际际际际码\<<<<<<<<<<<<<<<<上述上述上述上述上述(\x20-\x08\x0b\x0c\x0e-\x1f\x7f]| \x21-\x23-\x5b][\x5d-\x7e][\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\([x01-\x01-\x01-\x01-\x01-\x09\x09\x09\x09\x09\X0\X0\x01-\x01-\x01-\x01-\x01-\x09\x09\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\\X0\X000000000000000000B-\X0-\X0-\X0-\X0-\X0\X0-\X0-\X0\X0\X0\X0\X0-\X7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7[[[[7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7][[[[[[[[DCF\uFDF0-\uFFEF]([a-z]|\d-.[u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d-[u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d-\uFDCF-\uFDF0-\uFFEF])([u00A0-\U7FF-\uD7FF\uF900-\uFDCF-\UFF-\uFFEF])([a-z]\uFDCF-\UFF-\UFF-\UFF-\UFF-),
RegexOptions.Compiled)
使用本文,我为字符串创建了一个扩展方法,该方法将DNSLookup库连接在一起(Bill Andreozzi,billandr@towncompass.com在源代码中),Tom Janssens()和我自己的正则表达式实现的最小Telnet,用于验证电子邮件地址:
RegEx reg=new RegEx(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$", RegexOptions.IgnoreCase); ///Object initialization for Regex
if(reg.IsMatch("email string"))
//valid email
/// <summary>
/// The regular expression to test the string against.
/// </summary>
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);
/// <summary>
/// Determines whether the specified string is a valid email address.
/// </summary>
/// <param name="value">
/// The string to validate.
/// </param>
/// <returns>
/// <c>true</c> if the specified string is a valid email address;
/// otherwise, <c>false</c>.
/// </returns>
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;
}
/// <summary>
/// Compares two strings for length and content from the Telnet stream.
/// </summary>
/// <param name="input">The input string.</param>
/// <param name="response">The desired response.</param>
/// <returns>true if the response is the first characters if the input,
/// false otherwise</returns>
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;
}
//
///用于测试字符串的正则表达式。
///
私有静态只读Regex validEmailRegex=新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);
///
///确定指定的字符串是否为有效的电子邮件地址。
///
///
///要验证的字符串。
///
///
///如果指定的字符串是有效的电子邮件地址,则为true;
///否则,错误。
///
公共静态bool IsValidEmailAddress(此字符串值)
{
如果(!validEmailRegex.IsMatch(值))
{
返回false;
}
var mailServer=new DNS().LookupMX(value.Split('@')[1]);
如果(!mailServer.MoveNext())
{
返回false;
}
var telnet=新的TelnetConnection(((DNS_MX_数据)((DNS_包装器)mailServer.Current).dnsData).pNameExchange,25);
尝试
{
如果(!TelnetCompare(telnet.Read(),“220”))
{
返回false;
}
telnet.WriteLine(“helo hi”);
如果(!TelnetCompare(telnet.Read(),“250”))
{
返回false;
}
telnet.WriteLine(“邮件发件人:”+值);
如果(!TelnetCompare(telnet.Read(),“250”))
{
返回false;
}
telnet.WriteLine(“rcpt到:”+值);
如果(!TelnetCompare(telnet.Read(),“250”))
{
返回false;
}
}
最后
{
telnet.WriteLine(“退出”);
}
返回true;
}
///
///比较Telnet流中两个字符串的长度和内容。
///
///输入字符串。
///期望的响应。
///如果响应是输入的第一个字符,
///否则就错了
专用静态bool TelnetCompare(字符串输入、字符串响应)
{
if(string.IsNullOrEmpty(输入)| | string.IsNullOrEmpty(响应))
{
返回false;
}
if(输入长度<响应长度)
{
返回false;
}
返回string.CompareOrdinal(input.Substring(0,response.Length),response)==0;
}
Regex 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验证电子邮件地址格式?验证电子邮件地址是否存在?验证电子邮件是否已发送或接收?验证电子邮件的概念?这里的问题是什么?这不是“真实的电子邮件”
if (dateEdit1.EditValue == null || textEdit11.EditValue == null || textEdit10.EditValue == null || comboBox1.Text == null
|| textEdit12.EditValue == null || dateEdit2.EditValue == null || textEdit12.EditValue == null || comboBox2.Text == null
|| comboBox2.Text == null || textEdit14.EditValue == null || textEdit15.EditValue == null || textEdit16.EditValue == null
|| textEdit17.EditValue == null || textEdit18.EditValue == null || comboBox5.Text == null || textEdit19.EditValue == null)
{
XtraMessageBox.Show("Please submit the record");
}
else
{
DialogResult dialog = XtraMessageBox.Show("Are you sure you want to remove this record?", "Delete Record", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dialog == DialogResult.OK)
{
String st = "DELETE FROM OutPatient WHERE OutPatientID =" + textEdit8.Text;
SqlCommand com = new SqlCommand(st, con);
con.Open();
try
{
com.ExecuteNonQuery();
}
catch (SqlException)
{
con.Close();
}
ClearOutPatient();
}
else if (dialog == DialogResult.Cancel)
{
ClearOutPatient();
}