SmtpClient получить результат с сервера при отправке - PullRequest
12 голосов
/ 01 сентября 2011

Метод отправки SmtpClient возвращает void. Есть ли способ получить ответ сервера? Я только предполагаю, что это было успешно, если это не вызывает исключение?

Класс, на который я ссылаюсь ... http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx

Ответы [ 3 ]

18 голосов
/ 01 сентября 2011

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

Вы, вероятно, уже знаетеостальное, но на всякий случай ...

Оттуда электронная почта может быть потеряна и не доставлена ​​множеством способов.Ваш сервер может принять его и принять решение не отправлять его или принять его и потерять питание перед сбоем.По пути оно может быть заблокировано спам-фильтром и т. Д.

Вы можете думать, что электронное письмо похоже на обычное письмо в том смысле, что оно проходит через несколько рук между отправителем и получателем.Из своего кода вы можете только подтвердить, что он попал на SMTP-сервер, который вы используете для отправки, что аналогично передаче его кассиру в почтовом отделении.Вы не знаете (или должны знать), как сообщение оттуда отправляется.это может быть воздушный, наземный или почтовый голубь.Вы вышли из уравнения - вам не нужно знать, как оно отправляется, просто вы доверяете, что они знают, как это отправить.(То же самое можно сказать и об электронном письме.)

Если вам необходимо подтвердить, что получатель открыл его, есть способы встроить изображение в сообщение HTML на вашем сервере и отслеживать его в журналах, когда это изображениеи т. д. (отслеживание электронной почты Google и отслеживание открытия электронной почты)

С другой стороны ...

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

4 голосов
/ 01 сентября 2011

Вы можете использовать событие SendCompleted, чтобы проверить, что ваш smtpclient работает нормально, как это:

http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.sendcompleted.aspx

Но вы не можете получить подтверждение того, что ваше сообщение достигло получателя, поскольку оно может застрять на любом сервере / фильтре в цепочке сообщений.

1 голос
/ 01 сентября 2011

Вы предполагаете, что он был успешным, если не выбрасывает ... хотя успех в этом случае означает только то, что он был принят почтовым сервером, все остальное затем до сервера ...

Если вы хотите немного контроля, вы можете использовать SendAsync и перехватить событие SendCompleted ...

...