我有一个应用程序,用户可以通过从列表中选择姓名来向其他用户发送电子邮件。还有一个文本框,他们可以在其中自由输入要抄送的电子邮件地址列表。目前,Cc 的每个地址都通过扩展的正则表达式进行验证,该表达式检查是否符合 RFC2822。然后将地址添加到 System.Net.Mail.MailMessage.CC 集合中,类似这样...
MailMessage message = new MailMessage(/*...*/);
//foreach address ...
{
try
{
MailAddress address = new MailAddress(strAddress);
message.CC.Add(address);
}
catch (FormatException fe)
{
// display error to user, don't sent the message
return false;
}
}
//send the message ...
我的问题是 - 使用正则表达式验证每个地址是否有任何意义,还是我应该只依靠 System.Net.Mail.MailAddress 为我进行验证?
请您参考如下方法:
如果您使用 System.Net.Mail 发送邮件,那么最好使用 MailAddress 类进行验证,因为您知道您可以使用这些类发送邮件(它不允许所有技术上有效的电子邮件地址,但允许您无法发送到的地址是没有意义的)。
遗憾的是没有 TryParse 方法,因为无效地址并不是真正的异常(exception)情况,以这种方式使用异常进行流量控制并不好,但它本质上是相同的方式我们做到了。
我确实事先添加了一个基本的健全性检查,以减少在公然无效地址上抛出的异常数量。没什么特别的,只是检查是否有 @ 和 . 在合理的位置。我记不清了,但它是如此简单,我想我只是使用了 String.IndexOf 而不是正则表达式。所以,是的,我认为类似的事情值得做,但不要在这上面花太多时间。
