2010-07-13 34 views
8

我正在处理一个项目,其中一个需求是重写一个ASP.NET应用程序。旧的ASP.NET应用程序基于.NET Framework 1.1。新的ASP.NET应用程序基于.NET Framework 3.5。ASP.NET - SmtpClient - 无法连接到远程服务器

旧的Web应用程序的功能之一是发送电子邮件的功能。旧代码使用System.Web.Mail.SmtpMail类,而新的Web应用程序使用System.Net.Mail.SmtpClient类。

在我们的开发服务器上进行测试时,一切正常。但是,我们有两个测试客户端测试我们的软件,他们都遇到了在新的Web应用程序中发送电子邮件的问题。

具体的例外情况如下:

无法连接到远程服务器---> 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 2010-07-13 14:43:25

+0

我无法访问它们,我也不认为测试版客户端可以访问它们。再一次,这在我们的结局中运行良好。这是非常基本的功能。 – Chris 2010-07-13 14:45:24

+0

你如何指定服务器?在SmptClient的构造函数中,还是在web.config中?你可以发布一些代码吗? – onof 2010-07-13 14:46:43

回答

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

你确信System.Web.Mail.SmtpMail的SMTPSERVER属性在旧代码中设置?可以在不设置此属性的情况下使用它,然后使用本地服务器的SMTP服务。 System.Web.Mail.SmtpMail.SmtpServer

0

具有u检查SMTP主机配置的web.config文件?您应该将配置部分复制到您的应用程序。

3

如果您正在使用任何防病毒软件,请检查它的日志以查看它是否因为防病毒。当McAffee阻止我的邮件时,我面临同样的问题(有一个安全策略 - 防止群发邮件蠕虫发送邮件)。编辑此策略并将您的应用程序添加到例外列表。在我的情况下,这个问题排序。请检查它是否适用于您。