.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,最后只好改用

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

 

 

 

posted on   小小娟  阅读(2220)  评论(1编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?

导航

< 2010年12月 >
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示