c# – SMTP发送获取SmtpFailedRecipientException

这是我的问题.我正在向几个联系人发送电子邮件,如果有无效的电子邮件地址,我会收到错误消息.

基本上,它正在工作,但如果有超过1个无效的电子邮件,我没有收到其他不良电子邮件地址的通知.

data = XMLProcessing.LoadAll();

foreach (XMLData.StructReceiver user in data.Receiver)
{
    AddReceiver(user.Mail);
}

SetSubject(data.Body.Subject);
SetMessage(data.Body.Content);

SetSender(data.SenderReply.Sender);
SetReply(data.SenderReply.Replyer);

try
{                
    SMTP.Send(Message);                
}
catch (SmtpFailedRecipientException  e)
{
    if (e.FailedRecipient.ToString() != data.SenderReply.Replyer)
    {
         Failed.Add(e.FailedRecipient.ToString());
    }
}
finally
{
    SMTP.Dispose();
}

我通过将联系人添加到列表中然后将此列表发送到我的个人电子邮件收件人来接收通知,但捕获只发生一次,即使存在多于一个不良收件人.

最佳答案 请参阅
SmtpFailedRecipientsException.请注意,这是一个不同的类,SmtpFailedRecipientsException.这个类实际上是子类SmtpFailedRecipientException(没有s).

在捕获更一般的类型之前,您将需要捕获SmtpFailedRecipientsException(更具体的类型).

除了来自其父级的继承字段之外,它还提供了InnerExceptions(再次注意复数s).这是有关所有地址的发送失败的例外集合.您可以按照MSDN文章的描述进行迭代:

try
{
    SMTP.Send(Message);                
}
catch (SmtpFailedRecipientsException exs)
{
    foreach (SmtpFailedRecipientException e in exs)
    {
        if (e.FailedRecipient.ToString() != data.SenderReply.Replyer)
        {
             Failed.Add(e.FailedRecipient.ToString());
        }
    }
}
catch (SmtpFailedRecipientException e)
{
    if (e.FailedRecipient.ToString() != data.SenderReply.Replyer)
    {
         Failed.Add(e.FailedRecipient.ToString());
    }
}
finally
{
    SMTP.Dispose();
}
点赞