我试图使用以下代码使用c#发送电子邮件。
MailMessage mail = new MailMessage();
mail.From = new MailAddress(fromAddress, friendlyName);
mail.To.Add(toAddress);
mail.CC.Add(ccAddress);
//set the content
mail.Subject = emailSubject;
mail.Body = emailHeader + "\n" + emailBody;
//send the message
SmtpClient smtp = new SmtpClient(ServerAddress);
smtp.Credentials = CredentialCache.DefaultNetworkCredentials;
mail.IsBodyHtml = true;
smtp.Send(mail);
现在,我的函数接收到的"toAddress“字符串可能包含一个地址,或者它可能有许多逗号分隔的地址。
现在的问题是,如果多个逗号分隔地址,其中一个或两个可能是错误的电子邮件地址格式。
因此,当我试图使用这段代码发送电子邮件时,我会得到一个例外:
“指定的字符串不是电子邮件地址所需的形式。”
是否有任何方法验证逗号分隔的电子邮件地址?我在某个地方读到,验证电子邮件地址的唯一方法是向它发送一封电子邮件,因为用于验证电子邮件附件的正则表达式可能非常庞大。
而且,我无法控制设计,也无法控制地址字符串是如何到达我的功能的,我无法在UI中添加电子邮件验证,所以我在那里很无助…
我的问题是,电子邮件不会被传递给所有--逗号分隔字符串中的地址--即使只有地址的某些格式错误。
是否有任何方法正确地验证.NET中的电子邮件地址?有没有办法清除坏的电子邮件地址,并把邮件只发送给好的?
发布于 2009-06-16 10:55:02
您只需拆分逗号上的电子邮件字符串,并使用简单(或庞大)的电子邮件regex验证每个电子邮件地址。或者,尝试创建一个MailAddress
对象;它也支持对地址的一些基本验证。
发布于 2009-06-16 11:13:17
这是我们在生产中的代码(甚至为您添加了一个逗号)。通常,您不应该使用try/catch进行验证,但是它在这里工作得很好。我相信这比试图重新确认验证器要好得多。
string[] allToAddresses = to.Split(";,".ToCharArray(),
StringSplitOptions.RemoveEmptyEntries)
foreach (string toAddress in allToAddresses)
{
try
{
message.To.Add(toAddress);
}
catch (FormatException)
{
//do nothing, ill-formed address.
}
}
发布于 2009-06-16 11:00:09
目前,我们正在使用以下功能,并且它对我们非常有用:)
public static bool IsValidEmail(string email)
{
// source: http://thedailywtf.com/Articles/Validating_Email_Addresses.aspx
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(email);
}
请用这个:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
https://stackoverflow.com/questions/1000747
复制相似问题