我在C#中编写了一个发送邮件通知的简单程序。它在Windows 7上运行良好,但在Server 2008上失败。
我已经读过一些关于它的内容,但我看不出是什么阻止我发送邮件。我打开了端口587(Gmail的SSL端口)传出和进入(TCP)但仍然没有运气。我甚至为整个程序打开了防火墙。我应该注意Windows Server中的特定设置吗?
*编辑 - 除了Windows之外没有其他防火墙。
堆栈追踪:
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服务器无关。这是因为它无法连接到我的数据库。傻我。早些时候我无法连接到数据库时出现连接错误,但现在我得到的只是奇怪的错误消息;其中一个发布在这里。
感谢所有人的帮助!很高兴得到这么快的帮助。
答案 0 :(得分:2)
线索是例外,我怀疑与你的防火墙有什么关系:
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,但我会对它进行全面调查:
看起来这个问题也可以在Windows 2008下发生,根据这篇文章,虽然是关于Windows EBS,但根本原因似乎是相同的(向右滚动到页面底部):
基本上,Windows可能会耗尽协议绑定。他们描述了一个名为enum.exe
的工具,它将确定您机器上存在的协议绑定的数量。
这里有一篇关于Stack Overflow的相关文章:
答案 1 :(得分:1)
提供的异常信息是否有可能为您提供有关错误的线索?那就是:
套接字上的操作不能 因为系统缺乏而执行 足够的缓冲空间或因为a 队列满了74.125 ..:587
在.NET中,很可能这是因为没有丢弃SmtpClient
。
答案 2 :(得分:0)
首先尝试排查问题,因为问题可能出在其他地方:-)
telnet yourSmtpServer 587