VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • C#教程之C# 使用 SmtpClient.SendAsync 方法发送邮件失

问题:

调用 SmtpClient.SendAsync,在 SendCompleted 的回调函数里面总是获取到 e.Cancelled 为 true
后来测试了一下,相同的代码,只是把 SmtpClient.SendAsync 改成 SmtpClient.Send 方法,邮件发送成功。


原因:

在发送邮件前把 SmtpClient 的实例释放了。因为 SendAsync 是一个异步的操作,调用了这个方法之后只是把邮件推送到了 SMTP 服务器,而发送的操作实际上还没完成,当 SmtpClient 实例被释放时,它会取消任何未完成的异步操作,所以这个邮件也被取消了。因此,正确的做法是把 SmtpClient 的实例放在SendCompleted 的回调函数里面再释放,MailMessage 实例也是一样,否则会报

System.Net.Mail.SmtpException: 发送邮件失败。 ---> System.ObjectDisposedException: 无法访问已释放的对象。

的错误。

 

相关教程