SmtpException в приложении ASP.NET с удаленным браузером
У меня есть приложение ASP.NET 4, работающее под IIS 7 на компьютере с Windows Server 2008. Приложение использует System.Net.Mail
классы для отправки электронной почты через SMTP-сервер. Я использую порт 587 для соединения SSL. Когда я просматриваю приложение с сервера, электронные письма отправляются в порядке. Однако при просмотре приложения с удаленного (клиентского) компьютера отправка электронной почты завершается неудачно с SmtpException
имеющий StatusCode = GeneralFailure
, В сообщении говорится, что SMTP-сервер не может быть подключен и есть внутренний SocketException
,
На сервере установлена антивирусная система F-Secure. Я пытался отключить его, но ошибки сохраняются.
Отправка электронной почты работает или нет, в зависимости от того, как я получаю доступ к веб-серверу:
- Если я захожу на http://myapp.mydomain.com/ с удаленного клиента, используя общедоступное DNS-имя сервера, то происходит сбой.
- Если я захожу на http://193.144.xxx.xxx/myapp с удаленного клиента, используя публичный IP-адрес сервера и имя веб-приложения в IIS, то это также дает сбой.
- Если я перехожу по http://internal-name/myapp с удаленного клиента, используя внутреннее имя сервера в домене, а также имя веб-приложения в IIS через VPN, то это работает!
- Если я перехожу из интерактивного сеанса на сам сервер, независимо от того, как я это делаю (публичное DNS-имя, публичный IP-адрес, внутреннее доменное имя или просто
localhost
), то тоже работает Как это возможно, что отправка почты работает при просмотре с сервера, но не при удаленном просмотре? В обоих случаях это один и тот же сервер, отправляющий письма.
И если я просматриваю приложение на своем компьютере разработчика из Visual Studio, то все работает нормально.
Пожалуйста, посмотрите это тоже: https://serverfault.com/questions/845606/iis-randomly-returning-inet-e-resource-not-found
РЕДАКТИРОВАТЬ. Сервер имеет частный IP-адрес для внутреннего использования на работе, а также общедоступный IP-адрес, к которому разрешается общедоступный DNS. Этот публичный IP-адрес не настроен на самом сервере; скорее это услуга пересылки, осуществляемая нашим провайдером доступа в Интернет. Возможно ли, что SMTP-сервер сбит с толку тем фактом, что запрос на соединение поступает от клиента, который утверждает, что имеет адрес, но затем имеет имя, которое разрешается в другой адрес?
Есть идеи? Благодарю.
1 ответ
После долгих исследований мы обнаружили корень проблемы. Наш провайдер доступа к Интернету обнаружил ошибку конфигурации в таблицах NAT, которые сопоставили общедоступный IP-адрес с внутренним IP-адресом нашего сервера. Это привело к тому, что некоторые запросы были отброшены. Они исправили конфигурацию, и теперь все работает хорошо.
Спасибо всем, кто помог с этим.