问题描述
|
我已经用C#编写了一个简单的程序来发送邮件通知。它在Windows 7上运行良好,但在Server 2008上运行失败。
我已经阅读了有关它的内容,但是看不到是什么使我无法发送邮件。我已经打开了端口587(Gmail的SSL端口)的传出和传入(TCP),但还是没有运气。我什至为整个程序打开了防火墙。我应该注意Windows Server中的特定设置吗?
*编辑-除Windows之外,没有其他防火墙。
堆栈跟踪:
System.Net.Mail.SmtpException:发送邮件失败。
---> System.Net.WebException:无法连接到远程服务器
---> System.Net.sockets.socketException:无法对套接字执行操作,因为系统缺少足够的缓冲区空间或队列已满74.125 ..:587
在System.Net.sockets.socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress)
在System.Net.ServicePoint.ConnectSocketInternal处(布尔connectFailure,Socket s4,Socket s6,Socket&套接字,IPAddress&地址,ConnectSocketState状态,IAsyncResult asyncResult,Int32超时,Exception&异常)
---内部异常堆栈跟踪的结尾---
编辑:我找到了答案:问题与Windows服务器无关。这是因为它无法连接到我的数据库。傻我先前,当我无法连接数据库时出现连接错误,但是现在我得到的只是奇怪的错误消息;其中之一发布在这里。
无论如何,感谢所有帮助!很高兴能尽快获得帮助。
解决方法
线索是一个例外,我怀疑与您的防火墙有关:
System.Net.Sockets.SocketException:无法在套接字上执行操作
因为系统缺少足够的缓冲区空间,或者因为队列已满
有一篇Microsoft KB文章可能值得回顾,它适用于Windows 2003,但我将同样进行调查:
BUG:当您访问Web服务或使用IPAddress类时,您收到一条“”操作已超时\“错误消息
根据本文,该问题似乎也可能在Windows 2008下发生,尽管该问题与Windows EBS有关,但根本原因似乎相同(向右滚动至页面底部):
EBS控制台每5-7天崩溃一次
基本上,Windows可能会用尽协议绑定。他们描述了一个名为“ 0”的工具,该工具将确定计算机上存在的协议绑定的数量。
这里有关于堆栈溢出的相关文章:
为什么我的C#服务中出现此SocketException?
, 提供的异常信息是否可能为您提供有关错误之处的线索?那是:
无法在套接字上执行操作
由于系统缺乏而执行
足够的缓冲区空间或
队列已满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-系统缺少足够的缓冲区空间,或因为队列已满。aspx。
在.NET中,这很可能是由于不处理ѭ1造成的。
, 首先尝试解决问题,因为问题可能在其他地方:-)
尝试禁用防火墙并尝试一下。这可能与Windows 2008上的防火墙阻止您的方式确实有所不同
尝试运行您要达到的
telnet yourSmtpServer 587