Как SmtpClient определяет, какой почтовый сервер использовать, когда указан localhost? - PullRequest
1 голос
/ 14 января 2010

Я настраивал ELMAH для отправки уведомлений об ошибках по электронной почте, и я обнаружил кое-что интересное, которое застало меня врасплох.

В моем web.config раздел elmah был настроен так:

<elmah>
    <errorMail from="sender@example.com"
               to="recipient@example.com"
               subject="Error Notification"
               smtpServer="localhost" />
</elmah>

Это прекрасно работает на наших серверах IIS, и электронные письма отправляются мгновенно. Я предположил, что когда я запустил свое приложение в Visual Studio, ELMAH не будет знать, что делать с сервером localhost, поскольку у Cassini не настроен почтовый сервер. И вот, при тестировании этой теории я обнаружил, что уведомление об ошибке действительно отправляется. Это занимает значительно больше времени (около 2 минут по сравнению с мгновенным на сервере IIS или если я указываю почтовый сервер напрямую).

Как SmtpClient.Send () узнает, какой почтовый сервер использовать, если он явно не указан?

Я немного покопался в Reflector и подозреваю, что это может быть где-то в SmtpTransport (возможно, метод GetConnection ()?).

1 Ответ

0 голосов
/ 14 января 2010

Ну, ответ был не таким захватывающим или интересным, как я думал. У меня были видения сложных методов обнаружения почтового сервера, но оказалось, что у меня просто запущена служба SMTP, привязанная к IIS на моем локальном компьютере, поэтому localhost работает как почтовый сервер в Cassini.

Забавно, что технологии кажутся волшебными, пока вы не понимаете их внутреннюю работу: P

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