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

Chr*_*ris 8 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该类.

在我们的开发服务器上进行测试时,一切正常.但是,我们有两个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);
Run Code Online (Sandbox Code Playgroud)

Ben*_*son 5

"无法连接到远程服务器---> System.Net.Sockets.SocketException:无连接可以作出,因为目标机器积极拒绝"错误通常意味着你正在尝试的TCP端口连接到没有监听它的任何服务,即它关闭并且无法建立TCP连接,更不用说SMTP连接了.

您的交换日志中不会显示任何内容,因为它在网络堆栈中的较低级别失败,并且您的邮件服务器甚至不会看到连接尝试.

你也可以发布.net1.1代码吗?最可能的问题是服务器正在侦听非标准端口,而您没有在新代码中指定该端口.请注意,您需要使用Port酒店设置港口,您不能简单地将其附加到Host酒店,例如

错误:

client.Host = "mail.someco.com:10000";
Run Code Online (Sandbox Code Playgroud)

正确:

client.Host = "mail.someco.com";
client.Port = 10000;
Run Code Online (Sandbox Code Playgroud)