SmtpFailedRecipientException 和 SmtpFailedRecipientsException

Mr.*_*Boy 3 .net c# exception smtpclient

我正在努力区分这两个异常,特别是根据它们的属性和用法:

  • 它们都FailedRecipient为单个电子邮件地址定义了一个属性
  • 如果你抓住SmtpFailedRecipientException这个面具SmtpFailedRecipientsException

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

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

就捕获, andSmtpClient.Send()而言,正确处理的调用应该是什么样子?SmtpFailedRecipientExceptionSmtpFailedRecipientsExceptionSmtpException

Vas*_*dis 5

SmtpFailedRecipientsException是SmtpFailedRecipientException的子类。也是SmtpExceptionSmtpFailedRecipientException的子类。

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

您将得到的例外是SmtpFailedRecipientsException.

在捕获 SmtpFailedRecipientException、SmtpFailedRecipientsException 和 SmtpException 方面,正确处理的 SmtpClient.Send() 调用应该是什么样子?

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
}
Run Code Online (Sandbox Code Playgroud)