当我使用SmtpClient的SendAsync方法时如何捕获SmtpFailedRecipientsException?

时间:2017-05-03 01:01:37

标签: c# .net email

SmtpClient类的Send方法定义了5个Exceptions:

ArgumentNullException InvalidOperationExecption 的ObjectDisposedException SmtpException SmtpFailedRecipientsException

SendAsync方法定义4例外:

ArgumentNullException InvalidOperationExecption 的ObjectDisposedException SmtpException

那么当我使用SendAsync时如何捕获SmtpFailedRecipientsException?

我试过,我用一些错误的电子邮件地址来测试,但我抓不到 使用SendAsync时的SmtpFailedRecipientsException

1 个答案:

答案 0 :(得分:0)

如果要检测收件人错误,则必须使用在异步操作完成时涉及通知的机制。由于SendAsync()在完成之前返回并且没有返回任何状态,显然它无法报告任何类似的错误。

在我看来,处理此问题的最佳方法是使用SendMailAsync()。使用该方法,您将在await表达式中使用它,await将导致在操作以失败完成时在代码中的该位置抛出异常。

如果您不想使用SendMailAsync(),那么您必须订阅SmtpClient.SendCompleted事件,然后在调用处理程序时,检查AsyncCompletedEventArgs.Error属性(返回Exception引用,如果没有错误则返回null,以查看是否发生错误,如果是,则错误是什么。