smtpfailedrecipientsexception是否适用于CC和BCC

时间:2013-02-28 18:30:06

标签: asp.net system.net.mail

我正试图绕过System.Net.Mail类,但我找不到合适的文档。

第一个查询 - 假设我有一封带有CC和BCC电子邮件的电子邮件,我是否需要捕获SmtpFailedRecipientsException而不是SmtpFailedRecipientException(请注意单个收件人)或是否要发送给多个TO收件人?

第二个查询 - 当我使用下面的方法迭代异常时,内部异常是否与失败的电子邮件地址相关,例如BCC而不是TO或CC。如果是这种情况,那么重新发送会再次转到所有3吗?

    static void CheckExceptionAndResend(SmtpFailedRecipientsException ex, SmtpClient client, MailMessage message)
    {
        var status = ex.StatusCode;

        for (int i = 0; i < ex.InnerExceptions.Length; i++)
        {
            if (status == SmtpStatusCode.MailboxBusy ||
                status == SmtpStatusCode.MailboxUnavailable ||
                status == SmtpStatusCode.TransactionFailed)
            {
                System.Threading.Thread.Sleep(3000);
                client.Send(message);
            }
            else
            {
                // TODO: Log delivery failure
            }
        }
    }

所有建议都表示赞赏。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我不知道也不能回答你的第一个问题而是回答第二个问题,如果你没有在任何地方发送消息,除非在这个方法中,我不明白消息将如何再次发送或两次给收件人..

但是如果你在使用smtpclient实例发送消息之前由于异常而调用此方法,那么是的,消息再次被删除到所有3,即TO,BCC和CC,而不仅仅是失败的收件人。

答案 1 :(得分:0)

对于您的第一个查询,请查看由SmtpTransport.SendMail()调用的SmtpClient.Send()的源代码。如果仅拒绝一个收件人(无论To,CC或BCC),则生成的异常将是SmtpFailedRecipientException,但如果拒绝多个收件人,则它将是SmtpFailedRecipientsException。不方便的是,我认为这意味着你需要尝试捕捉这两种类型。