[英]Check Valid email address in c#
我正在c#Windows应用程序中使用smtp服务发送电子邮件。 我必须以最佳方式执行以降低电子邮件跳出率。 我必须检查提供的电子邮件地址是否有效。 我正在使用代码。
private void btnCheckValid_Click(object sender, EventArgs e)
{
if (isRealDomain(textBox1.Text.Trim()) == true)
MessageBox.Show("Valid Email Address!");
}
private bool isRealDomain(string inputEmail)
{
bool isReal = false;
try
{
string[] host = (inputEmail.Split('@'));
string hostname = host[1];
IPHostEntry IPhst = Dns.GetHostEntry(hostname);
IPEndPoint endPt = new IPEndPoint(IPhst.AddressList[0], 25);
Socket s = new Socket(endPt.AddressFamily,
SocketType.Stream, ProtocolType.Tcp);
s.Connect(endPt);
s.Close();
isReal = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
isReal = false;
}
return isReal;
}
通过检查真实域,我可以识别托管IP,但是是否在主机上创建了电子邮件地址。
使用正则表达式(正则表达式),我只能验证格式。
所以我的问题是如何在c#中仅查找任何域的有效地址。
您可以导入System.ComponentModel.DataAnnotations
并以这种方式使用它:
private bool validMail(string address)
{
EmailAddressAttribute e = new EmailAddressAttribute();
if (e.IsValid(address))
return true;
else
return false;
}
您可以使用如下正则表达式:
public static bool IsValidEmailAddress(string emailaddress)
{
try
{
Regex rx = new Regex(
@"^[-!#$%&'*+/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+/0-9=?A-Z^_a-z{|}~])*@[a-zA-Z](-?[a-zA-Z0-9])*(\.[a-zA-Z](-?[a-zA-Z0-9])*)+$");
return rx.IsMatch(emailaddress);
}
catch (FormatException)
{
return false;
}
}
更新:
如果您要按照评论中的说明验证特定域,则更为简单:
Regex rx = new Regex(
@"^[-!#$%&'*+/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+/0-9=?A-Z^_a-z{|}~])*@yourdomain.com$");
用您的域名替换yourdomain.com。
使用.Net邮件命名空间,您可以像这样验证电子邮件地址:
using System.Net.Mail;
private bool EmailVerify(string email)
{
try
{
var mail = new MailAddress(email);
return mail.Host.Contains(".");
}
catch
{
return false;
}
}
如果您正在使用
System.Net.Mail.SmtpClient
我发现的最准确的方法是尝试创建一个
System.Net.Mail.MailAddress
宾语。 如果无法使用字符串中的地址创建对象,则将引发以下其中一项:
ArgumentNullException // The address is null
ArgumentException // The address is string.Empty
FormatException // The address is not in a recognized format
https://msdn.microsoft.com/zh-CN/library/591bk9e8(v=vs.110).aspx
我发现
Dns.GetHostEntry
充其量是无聊的。 它似乎无法识别多层域为有效域(domain.subdomain1.subdomain2.com),因此使用该方法检查域不是确定的。
使用RegEx是可以的,但是它们通常无法将引用的地址和其他有效模式(根据RFC可以使用)识别为有效。
由于要使用SmtpClient类,无论如何都必须具有有效的MailAddress对象,这很有意义。
这是检查有效电子邮件地址的另一种方法
public bool IsValidEmail(string email)
{
try
{
var addr = new System.Net.Mail.MailAddress(email);
return addr.Address == email;
}
catch
{
return false;
}
}
public static bool IsValidEmail(string emailaddress)
{
return new EmailAddressAttribute().IsValid(emailaddress);
}
// using System.ComponentModel.DataAnnotations;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.