繁体   English   中英

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

[英]ASP.NET - SmtpClient - Unable to connect to the remote server

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

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

在我们的开发服务器上进行测试时,一切正常。 但是,我们有两个beta客户端测试我们的软件,他们都遇到了在新的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);

“无法连接到远程服务器---> 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;

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM