Ошибка при обработке объекта SmtpClient - PullRequest
1 голос
/ 25 августа 2011

Я использую приведенный ниже код для обработки результатов отправки почты с использованием System.Net.Mail.SmtpClient, и у меня возникают проблемы с перехватом истинного 'ошибка отправки' ​​против 'оппс ... позвольте мне попробовать это снова, о здорово , это сработало в условиях.

Мой метод SendMail закрывается следующим образом:

    smtp.SendCompleted += SendCompletedCallback;
    smtp.SendAsync(Msg, userState);

и обратный вызов:

    private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
    {
        var msg= (MailMessage)e.UserState;
        if (e.Cancelled)
        {
            Logger("Cancelled - " + msg.Subject.ToString()+ " : " + msg.To.ToString());
        }
        if (e.Error != null)
        {
            Logger("ERROR: " + msg.To.ToString() + " : " + e.Error.ToString());
        }
        else
        {
            Logger("EmailGateway: " + msg.Subject.ToString());
        }

    }

Проблема, которую я нахожу, заключается в нескольких проходах одного и того же сообщения через ветку if (e.Error != null) - иногда последующая попытка завершается успешно, иногда нет.

Другими словами, в моем Журнале иногда я вижу 2 строки в одном и том же сообщении (истинное состояние ошибки, потому что сообщение было не доставлено), но я также вижу случаи, когда Журнал показывает только одну ошибку, но затем он регистрирует успех. Поэтому иногда, даже несмотря на то, что журнал показывает ошибку для данного сообщения - письмо фактически было отправлено.

Вероятно, стоит указать, что в моем журнале не отображаются сообщения «Отменено». Это не похоже на , мы дадим ему 2 попытки, затем мы нажмем «отменено» . В случаях, когда показаны 2 попытки без отправления (условие истинного сбоя), создается впечатление, что удаленный сервер smtp дважды вызвал условие ошибки для одного и того же сообщения.

Так что, если я хочу добавить более надежную обработку ошибок, помимо простого ведения журнала, как я могу отличить истинные условия ошибки от повторной попытки, которая приводит к успеху?

Вот полное возвращаемое исключение. Мне следует разобрать «Попробуй еще раз позже», прежде чем регистрировать состояние ошибки, не так ли?

System.Net.Mail.SmtpException: служба недоступна, закрытие канал передачи. Ответ сервера был: 4.7.0 Временная система Проблема. Попробуйте позже (WS). e22sm1141297yba.20 at System.Net.Mail.SendMailAsyncResult.End (результат IAsyncResult) в System.Net.Mail.SmtpTransport.EndSendMail (результат IAsyncResult) в System.Net.Mail.SmtpClient.SendMailCallback (результат IAsyncResult)

ТНХ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...