SmtpClient получить результат от сервера при отправке

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

класс, о котором я говорю... http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx

3 ответов


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

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

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

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

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

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

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


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

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

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


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

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