SMTP发送获取SmtpFailedRecipientException

时间:2015-04-21 20:38:07

标签: c# smtp sendmail send smtpexception

这是我的问题。我正在向少数联系人发送电子邮件,如果电子邮件地址无效,我会收到错误。

基本上,它正在运行,但如果有超过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();
}

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

1 个答案:

答案 0 :(得分:2)

SmtpFailedRecipientsException。请注意,这是一个不同的类,SmtpFailedRecipient s 异常。这个类实际上是子类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();
}