C# 邮箱不可用时从MailMessage中删除收件人

C# 邮箱不可用时从MailMessage中删除收件人,c#,email,smtp,C#,Email,Smtp,我正在使用System.Net.Mail的SmtpClient类。当SmtpClient拒绝电子邮件地址时,我想从MailMessage.to字段中删除无效的收件人。这可能吗?这是我的代码,但它会在smtpClient.Sendmessage if message.To上抛出。它包含一封客户端无法发送给它的电子邮件,当所有电子邮件都有效时,它就可以正常工作 public void SendEmail(Machine machine) { var message =

我正在使用System.Net.Mail的SmtpClient类。当SmtpClient拒绝电子邮件地址时,我想从MailMessage.to字段中删除无效的收件人。这可能吗?这是我的代码,但它会在smtpClient.Sendmessage if message.To上抛出。它包含一封客户端无法发送给它的电子邮件,当所有电子邮件都有效时,它就可以正常工作

    public void SendEmail(Machine machine)
    {
        var message = new MailMessage();
        var smtpClient = new SmtpClient(smtpServer);

        message.From = new MailAddress(emailSender);

        foreach (var recipient in machine.Recipients)
        {
            message.To.Add(recipient);
        }

        message.Subject = string.Format(emailSubject, machine.Name, machine.Address);
        message.Body = ""; // body here

        message.Priority = MailPriority.High;

        smtpClient.Send(message);
    }
错误:
交易失败。服务器响应为:5.7.1:当其中一个收件人无效时,中继访问被拒绝发送方法抛出SmtpFailedRecipientsException。您应该查看msdn中SmtpFailedRecipientsException的示例

对于5.7.1响应,您实际上会得到一个普通的SmtpException,而不是SmtpFailedRecipientException/SMTPFailedRecipientSexException-请参阅.NET Framework源代码-,因此您必须检查异常的消息属性以识别相应的地址,例如,使用String.Contains,如果包括。

文档仅建议在五秒钟后重试。这不是问题的答案。SMTPFailedRecipient异常具有属性FailedRecipient和InnerException。在示例中是重试发送消息的循环,但您不必重试发送消息,您只能获得ex.InnerExceptions[i].FailedRecipient或ex.FailedRecipient。我从来没用过,但我想这可能是你问题的答案。