我正在尝试使用以下代码使用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中添加电子邮件验证,所以我很无奈......
我的问题是,即使只有 SOME 的地址格式错误,电子邮件也不会被发送到逗号分隔字符串中的地址 ALL .
有没有办法在.NET中正确验证电子邮件地址?有没有办法清理坏的电子邮件地址并将邮件发送给好的邮件地址?
12 回答
您可以在逗号上拆分电子邮件字符串,并使用简单(或巨大)的电子邮件正则表达式验证每个电子邮件地址 . 或者,尝试创建一个
MailAddress
对象;它也支持一些基本的地址验证 .这是我们 生产环境 的代码(甚至为您添加了逗号) . 通常你不应该使用try / catch进行验证,但它在这里运行良好 . 我相信它比尝试重新编码验证器更好 .
目前我们正在使用以下功能,它对我们来说工作得很好:)
请使用这个:
拥有100%符合RFC的电子邮件验证is hard,有关详细信息,请参阅this answer . 在.NET中,两种相对简单的方法是使用MailAddress
或者来自MSDN的更严格的基于Regex的方法(处理.NET 4.5的IDN和Regex解析超时):
以下将检查电子邮件地址是否正确(不是实际存在):
我用更简单的表达式(包括不区分大小写)更新了这个,以便有希望让它更清晰一点 .
以下是验证域实际存在的代码的基础知识:
您可以执行更多操作,例如,尝试连接以验证域将接收邮件 . 此外,您需要确保捕获必要的异常并正确处理它们 .
似乎没有一种验证电子邮件地址的好方法 .
我还没有找到一个正确验证的正则表达式 . 我有一些电子邮件地址被正则表达式阻止的情况 . 因此,我们的重点是确保MailMessage在发送期间不会抛出异常 . 如果是,我们可以通知用户 . 但除此之外,如果您提供错误的电子邮件地址,则不会收到电子邮件 .
因为没有其他答案似乎显示100%正在运行的正则表达式,我会有一个去 . 这取自 生产环境 代码,不受单字母TLD问题(me@mydomain.x)的影响 .
不记得我在哪里得到这个,但正如我所说,它在我的 生产环境 中起作用 .
微软刚刚更新了有关验证电子邮件的文档,效果很好 . 链接:https://docs.microsoft.com/en-us/dotnet/standard/base-types/how-to-verify-that-strings-are-in-valid-email-format
片段:
您始终可以在this site使用正则表达式 huge 并且完全不可读,但它会获得大多数边缘情况 .
是的,在分隔符上拆分电子邮件字符串,然后验证每个电子邮件地址 . 这是一个例子,它将在第二个电子邮件地址(foo#bar.com)上失败 . 我使用了asp.net正则表达式控件中的正则表达式来验证地址 .
你可以使用 Regex . 只需写下面的代码 .