【发布时间】:2010-07-13 14:40:57
【问题描述】:
我正在开展一个项目,其中一项要求是重新编写 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 应用程序的代码 sn-p:
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);
【问题讨论】:
-
Exchange 日志中是否有任何内容显示它拒绝连接?
-
我无权访问它们,我认为测试版客户端也无法访问它们。同样,这对我们来说效果很好。这是非常基本的功能。
-
如何指定服务器?在 SmptClient 的构造函数中,还是在 web.config 中?你能发布一些代码吗?
-
我刚刚修改了原始帖子以包含我在新的 ASP.NET 应用程序中使用的代码。
-
请注意,client.Host 必须只有服务器的名称或其 IP。端口必须在 Port 属性中设置。