1

System.Net.Mail クラスについて理解しようとしていますが、まともなドキュメントを見つけるのに苦労しています。

最初のクエリ - CC と BCC のメールを含むメールがあるとします。SmtpFailedRecipientException の代わりに SmtpFailedRecipientsException をキャッチする必要がありますか (単一の受信者に注意してください)、それとも複数の TO 受信者に送信するためのものですか?

2 番目のクエリ - 以下の方法を使用して例外を繰り返し処理すると、内部例外は、TO や CC ではなく BCC など、失敗した電子メール アドレスに関連します。この場合、再送信してから 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
            }
        }
    }

すべてのアドバイスに感謝します。前もって感謝します。

4

2 に答える 2

1

私はあなたの最初の質問に答えることができませんが、2番目の質問に答えるために、この方法以外の場所にメッセージを送信していない場合、メッセージが受信者に2回または2回送信される方法がわかりません..

ただし、例外が原因でこのメソッドが呼び出される前にsmtpclientインスタンスを使用してメッセージを送信している場合は、はい、メッセージは失敗した受信者だけでなく、TO、BCC、CCの3つすべてに再度配信されます。

于 2013-02-28T18:57:22.247 に答える
0

最初のクエリについては、 SmtpClient.Send()によって呼び出されるSmtpTransport.SendMail()ソース コードを見てください。受信者が 1 人だけ (To、CC、または BCC に関係なく) 拒否された場合、結果の例外は SmtpFailedRecipientException になりますが、複数の受信者が拒否された場合は、SmtpFailedRecipientsException になります。不便なことに、これは両方のタイプをキャッチしようとする必要があることを意味すると思います。

于 2014-09-09T21:23:25.057 に答える