Подтвердить что ты не робот

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

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

Класс, я имею в виду... http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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