Захват ошибок SMTP в .NET - PullRequest
       22

Захват ошибок SMTP в .NET

2 голосов
/ 19 февраля 2011

Обычно я отправляю электронные письма вот так:

int statusCode = 0;
string error = null;

try
{
    smtp.Send(mailMessage);
    statusCode = 250;
}
catch (SmtpFailedRecipientException e)
{
    Log(String.Format("[Exception] {0}\n\tSmtp: {1}{2}:{3}\n\tStatus Code: {4}\n\tFaild Recipient: {5}", e.Message, smtp.Key, smtp.Value.Host, smtp.Value.Port, e.StatusCode, e.FailedRecipient));

    statusCode = (int)e.StatusCode;
    error = e.Message;
}
catch (SmtpException e)
{
    Log(String.Format("[Exception] {0}\n\tSmtp: {1} - {2}:{3}\n\tStatus Code: {4}", e.Message, smtp.Key, smtp.Value.Host, smtp.Value.Port, e.StatusCode));

    statusCode = (int)e.StatusCode;
    error = e.Message;
}
catch (Exception e)
{
    Log(String.Format("[Exception] {0}.\n\tSource: {1}\n\tStack Trace: {2}", e.Message, e.Source, e.StackTrace));

    statusCode = -1;
    error = "General Failure";
}

Но этот метод не позволяет мне отлавливать некоторые более «продвинутые» ошибки SMTP, такие как «Нет домена», «Нет такой электронной почты» и т. Д.

Как я могу зафиксировать такого рода ошибки SMTP? Это вообще возможно?

Например, когда я пытаюсь отправить в Gmail на адрес, такой как asdfkljhadf@dgdfasdf.com, через некоторое время Gmail отправляет мне электронное письмо, которого asdfkljhadf@dgdfasdf.com не существует.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 19 февраля 2011

SMTP - это протокол «сохранить и переслать», означающий, что сервер может принять сообщение для пересылки, но не знать, когда сообщение не может быть доставлено. Так, например, когда вы говорите SMTP-серверу вашего интернет-провайдера доставить сообщение на «invalidaddress@example.com», ответ сервера будет «Хорошо, я перешлю его». Через некоторое время SMTP-сервер провайдера свяжется с SMTP-сервером для «example.com» и попытается доставить сообщение. Только тогда он узнает, что письмо не доставлено.

Что касается связи между вашим клиентом и SMTP-сервером, сообщение было доставлено успешно - сервер согласился переслать его. Поэтому не исключение.

2 голосов
/ 19 февраля 2011

Я не думаю, что эти ошибки известны серверу SMTP во время отправки электронной почты.SMTP-сервер узнает об этих ошибках, когда он получает ответ от других серверов после попытки найти домен / неверный адрес электронной почты и т. Д.

Если вы используете IIS, вы можете найти такие сообщения в папке неверных сообщений в IIS.

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