.NET异步发邮件的一个BUG
时间:2010-12-24 来源:小小娟

SmtpClient _SmtpClient = new SmtpClient();
_SmtpClient.Host = "邮件服务器";
_SmtpClient.Credentials = new NetworkCredential("用户名", "密码");
MailMessage message = new MailMessage();
message.From = new MailAddress("[email protected]", "发送人", Encoding.GetEncoding(936));
message.To.Add("[email protected]"); //这是个正确的地址
message.To.Add("[email protected]"); //这是个正确的地址
message.To.Add("[email protected]");//这是个无效的地址
message.Subject = "111";
message.Body = "222";
//同步发送
_SmtpClient.Send(message);
一共三个邮件接收人,第三个是无效的邮件地址。
执行后,会抛出一个异常:不允许使用邮箱名称。 服务器响应为: RP:RDN http://www.ipmotor.com/smtp_err.htm
但是其它两个邮件接收人依然会收到该封邮件,如下图:
接下来我们来看异步发送,代码如下:

SmtpClient _SmtpClient = new SmtpClient();
_SmtpClient.Host = "服务器地址";
_SmtpClient.Credentials = new NetworkCredential("用户名", "密码");
MailMessage message = new MailMessage();
message.From = new MailAddress("[email protected]", "发送人", Encoding.GetEncoding(936));
message.To.Add("[email protected]"); //这是个正确的地址
message.To.Add("[email protected]"); //这是个正确的地址
message.To.Add("[email protected]");//这是个无效的地址
message.Subject = "111";
message.Body = "222";
//异步发送
_SmtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
_SmtpClient.SendAsync(message, null);
也是一共三个邮件接收人,第三个是无效的邮件地址。
执行后,在回调函数中可以捕获到“未将对象应用设置到对象实例”的异常信息,但是其它两个邮件接收人就收不到邮件了。
照我个人的理解,同步、异步操作只是执行的方式不同,执行结果总得一样吧?但是发送邮件这里明显结果都不一样了,
应该是属于一个BUG吧?
PS:本来在项目中想用它的异步发送邮件,后来由于客户提供的邮箱地址不一定是合法的,从而发现了这个BUG,最后只好改用
新开一个线程,在该线程中进行同步发送邮件。
相关阅读 更多 +
排行榜 更多 +