Я настраивал 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 ()?).