2010-07-13 2 views
8

Я работаю над проектом, в котором одним из требований является перезаписать приложение ASP.NET. Старое приложение ASP.NET основано на .NET Framework 1.1. Новое приложение ASP.NET основано на .NET Framework 3.5.ASP.NET - SmtpClient - Не удается подключиться к удаленному серверу

Одной из функций старого веб-приложения была возможность отправки электронной почты. В старом коде используется класс System.Web.Mail.SmtpMail, тогда как новое веб-приложение использует класс System.Net.Mail.SmtpClient.

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

Конкретное исключение состоит в следующем:

Невозможно подключиться к удаленному серверу ---> System.Net.Sockets.SocketException: Подключение не может быть сделано, потому что целевая машина активно отказалась его

Оба старого и нового приложения ASP.NET находятся на одном сервере (Windows Server 2003). Они оба используют один и тот же почтовый сервер Exchange. Почему старое приложение ASP.NET может успешно отправлять электронную почту, но новый не может?

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

Ниже приведен фрагмент кода из нового приложения ASP.NET:

System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); 
mail.To.Add(messageTo); 
mail.From = new MailAddress(messageFrom); 
mail.Subject = messageSubject; 
mail.Body = messageBody; 

SmtpClient client = new SmtpClient(); 
client.Host = smtpServer; 
client.Send(mail); 
+0

Есть ли что-либо в журналах Exchange, которые показывают, что он отказывается от соединения? – David

+0

У меня нет доступа к ним, и я не думаю, что бета-клиент также сможет получить к ним доступ. Опять же, это сработало хорошо на нашей стороне. Это довольно простая функциональность. – Chris

+0

Как вы указываете сервер? в конструкторе SmptClient или в web.config? можете ли вы опубликовать код? – onof

ответ

5

«Невозможно подключиться к удаленному серверу ---> System.Net.Sockets.SocketException: Подключение не может быть сделано, потому что целевая машина активно отказалась от него» ошибки обычно означает, что TCP-порт вы при попытке подключения к нему нет какого-либо обслуживания, прослушивающего его, т. е. он закрыт, а tcp-соединение не может быть выполнено, не говоря уже о SMTP-соединении.

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

Можете ли вы опубликовать код .net1.1? Наиболее вероятная проблема заключается в том, что сервер прослушивает нестандартный порт, и вы не указываете этот порт в новом коде. Обратите внимание, что вам нужно установить порт с помощью свойства Port, вы не можете просто добавить его к свойству Host, например.

Неправильно:

client.Host = "mail.someco.com:10000"; 

Правильно:

client.Host = "mail.someco.com"; 
client.Port = 10000; 
0

Вы уверены, что свойство SmtpServer из System.Web.Mail.SmtpMail установлен в старом коде? Его можно было использовать без установки этого свойства, а затем он использовал SMTP-службу локального сервера. System.Web.Mail.SmtpMail.SmtpServer

0

ли у проверить файл web.config для настройки SMTP хост? Скопировать раздел конфигурации в приложение.

3

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

Смежные вопросы