ASP.NET - SmtpClient - 无法连接到远程服务器

时间:2010-07-13 14:40:57

标签: c# asp.net

我正在开发一个项目,其中一个要求是重写ASP.NET应用程序。旧的ASP.NET应用程序基于.NET Framework 1.1。新的ASP.NET应用程序基于.NET Framework 3.5。

旧的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);

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:4)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您是否检查了web.config文件以获取smtp主机配置?您应该将配置部分复制到您的应用程序。