.NET异步发邮件的一个BUG

我们先来看同步发送邮件的代码

代码
 
   
SmtpClient _SmtpClient = new SmtpClient();
_SmtpClient.Host
= " 邮件服务器 " ;
_SmtpClient.Credentials
= new NetworkCredential( " 用户名 " , " 密码 " );

MailMessage message
= new MailMessage();
message.From
= new MailAddress( " hamptest@hampoo.com " , " 发送人 " , Encoding.GetEncoding( 936 ));
message.To.Add(
" tianhu.jin@hampoo.com " ); // 这是个正确的地址
message.To.Add( " dayan.qiu@hampoo.com " ); // 这是个正确的地址
message.To.Add( " jieyuan.jin@hampoo.com " ); // 这是个无效的地址
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( " hamptest@hampoo.com " , " 发送人 " , Encoding.GetEncoding( 936 ));
message.To.Add(
" tianhu.jin@hampoo.com " ); // 这是个正确的地址
message.To.Add( " dayan.qiu@hampoo.com " ); // 这是个正确的地址
message.To.Add( " jieyuan.jin@hampoo.com " ); // 这是个无效的地址
message.Subject = " 111 " ;
message.Body
= " 222 " ;

// 异步发送
_SmtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
_SmtpClient.SendAsync(message,
null );

也是一共三个邮件接收人,第三个是无效的邮件地址。

执行后,在回调函数中可以捕获到“未将对象应用设置到对象实例”的异常信息,但是其它两个邮件接收人就收不到邮件了。

 

照我个人的理解,同步、异步操作只是执行的方式不同,执行结果总得一样吧?但是发送邮件这里明显结果都不一样了,

应该是属于一个BUG吧?

PS:本来在项目中想用它的异步发送邮件,后来由于客户提供的邮箱地址不一定是合法的,从而发现了这个BUG,最后只好改用

新开一个线程,在该线程中进行同步发送邮件。

 

 

 

转载于:https://www.cnblogs.com/jintianhu/archive/2010/12/24/1915840.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值