Windows Server2008: недостаточно ли открытия порта SMTP для отправки почты? - PullRequest
3 голосов
/ 30 мая 2011

Я написал простую программу на C #, которая отправляет почтовые уведомления. Он отлично работает в Windows 7, но не работает на Server 2008.

Я немного об этом читал, но не вижу, что мешает мне отправлять почту. Я открыл порт 587 (порт SSL для Gmail), исходящий и входящий (TCP), но все равно не повезло. Я даже открыл брандмауэр для всей программы. Есть ли в Windows Server конкретные настройки, о которых мне следует знать?

* Редактировать - Нет других брандмауэров, кроме собственных окон.

Трассировка стека:

System.Net.Mail.SmtpException: Failure sending mail.
---> System.Net.WebException: Unable to connect to the remote server
---> System.Net.Sockets.SocketException: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full 74.125..:587
     at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
     at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
--- End of inner exception stack trace ---

РЕДАКТИРОВАТЬ: Я нашел свой ответ: проблема не была связана с Windows Server. Это потому, что он не мог подключиться к моей базе данных. Дурак я. Ранее я получал ошибку подключения, когда не смог подключиться к базе данных, но теперь все, что я получил, было странными сообщениями об ошибках; один из которых был размещен здесь.

Спасибо за помощь в любом случае! Здорово получить помощь так быстро.

Ответы [ 3 ]

2 голосов
/ 02 июня 2011

Подсказка в исключении, и я сомневаюсь, что это имеет какое-то отношение к вашему брандмауэру:

System.Net.Sockets.SocketException: An operation on a socket could not be performed 
because the system lacked sufficient buffer space or because a queue was full

Есть статья в Microsoft KB, которую, возможно, стоит рассмотреть, она для Windows 2003, но я бы исследовалвсе то же самое:

BUG: вы получаете сообщение об ошибке «Истекло время ожидания операции» при доступе к веб-службе или при использовании класса IP-адреса

Похоже, что эта проблема может возникать и в Windows 2008, в соответствии с этой статьей, которая, хотя и касается Windows EBS, по-видимому, является основной причиной (прокрутите вправо до нижней части страницы):

Консоль EBS аварийно завершает работу каждые 5-7 дней

В принципе, в окнах могут быть привязки протоколов.Они описывают инструмент под названием enum.exe, который будет определять количество привязок протоколов, имеющихся на вашем компьютере.

Здесь есть соответствующая статья о переполнении стека:

Почемуя получаю это SocketException в своем сервисе C #?

1 голос
/ 02 июня 2011

Возможно ли, что предоставленная информация об исключении даст вам понять, что не так?То есть:

Операция над сокетом не может быть выполнена из-за недостатка буферного пространства в системе или из-за переполнения очереди 74.125 ..: 587

См. http://blogs.msdn.com/b/sql_protocols/archive/2009/03/09/understanding-the-error-an-operation-on-a-socket-could-not-be-performed-because-the-system-lacked-sufficient-buffer-space-or-because-a-queue-was-full.aspx.

В .NET вполне возможно, что это будет вызвано тем, что вы не утилизируете ваш SmtpClient.

0 голосов
/ 02 июня 2011

Попробуйте сначала устранить неполадки, так как проблема может быть где-то еще :-)

  1. Попробуйте отключить брандмауэр и попробуйте. Это может быть что-то совсем другое, чем брандмауэр в Windows 2008, блокирующий ваш путь
  2. Попробуйте запустить telnet yourSmtpServer 587, что вы пытаетесь достичь
...