SmtpFailedRecipientException和SmtpFailedRecipientsException

时间:2015-10-15 12:14:47

标签: c# .net exception exception-handling smtpclient

我努力区分这两个例外,特别是基于它们的属性和用法:

  • 他们都为单个电子邮件地址定义FailedRecipient属性
  • 如果您抓住SmtpFailedRecipientException,则会屏蔽SmtpFailedRecipientsException

从逻辑上讲,我希望复数版本具有优先权 - 服务器无法将您的电子邮件发送给任何收件人 - 通过无法发送给单个特定收件人的服务器。

但是如果你发送给8个收件人并且其中两个收件人失败怎么办 - 现在你有什么例外?

在抓取SmtpClient.Send()SmtpFailedRecipientExceptionSmtpFailedRecipientsException方面,对SmtpException的正确处理呼叫应该是什么样的?

1 个答案:

答案 0 :(得分:3)

SmtpFailedRecipientsExceptionSmtpFailedRecipientException的子类。另外,SmtpFailedRecipientExceptionSmtpException的子类。

  

但是,如果您发送给8个收件人却其中两个失败,怎么办-现在您会得到什么例外?

您将获得的例外是SmtpFailedRecipientsException

  

正确处理SmtpClient.Send()的调用应该如下所示:   捕获SmtpFailedRecipientException的条款,   是SmtpFailedRecipientsException和SmtpException?

try {

    smtpClient.Send(mailMessage);    
}
catch (SmtpFailedRecipientsException recipientsException)
{
    Console.WriteLine($"Failed recipients: {string.Join(", ", recipientsException.InnerExceptions.Select(fr => fr.FailedRecipient))}");

    // your code here
}
catch (SmtpFailedRecipientException recipientException)
{
    Console.WriteLine($"Failed recipient: {recipientException.FailedRecipient}");

    // your code here
}
catch (SmtpException smtpException)
{
    Console.WriteLine(smtpException.Message);

    // your code here
}