无法使用smtpclient发送邮件到localhost iis站点

4

我有一个运行在本地iis网站上的asp.net mvc应用程序,使用System.Net.Mail中的SmtpClient发送邮件失败。我正在尝试向我的hotmail地址发送邮件,但出现了套接字异常。您有什么想法是问题出在哪里吗?

using(var message = new MailMessage())
            {
                message.From = new MailAddress(AdminEmail);
                message.To.Add(new MailAddress(to));
                message.Subject = subject;
                message.Body = body;
                message.IsBodyHtml = false;

                var mailClient = new SmtpClient();
                mailClient.Send(message);
            }

这里是异常信息:

{System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:25
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)}

我认为默认应用程序池没有访问intepub\wwwroot的权限。在尝试测试连接时,我收到了以下错误信息:
服务器配置为使用内置帐户进行穿透式身份验证以访问指定的物理路径。但是,IIS管理器无法验证内置帐户是否具有访问权限。请确保应用程序池标识具有对物理路径的读取访问权限。如果此服务器加入了域,并且应用程序池标识是NetworkService或LocalSystem,请验证$是否对物理路径具有读取访问权限。然后再次测试这些设置。

你的本地主机上是否运行着SMTP服务器? - GregD
我认为这是我的问题的一部分。我打开了IIS管理器,并将SMTP服务器设置为本地主机,但它仍然无法工作。还有其他需要配置的东西吗? - Joe
你能够在本地机器上telnet到25端口吗?你使用的是什么操作系统?本地机器上有防火墙吗? - GregD
我正在运行Vista Home Premium。我有防火墙,但由于连接是出站的,这会有影响吗?另外,我不确定如何开始使用Telnet。 - Joe
4个回答

3
根据你对我的评论回答,Joe,你的本地计算机上没有启用SMTP。Vista没有SMTP。因此,你需要安装第三方SMTP应用程序来在Vista上运行,或者使用另一个应用程序发送邮件,在这种情况下,你的Hotmail帐户可能允许你通过它发送邮件。我不使用Hotmail,所以不知道它是否可以,但应该是类似于smtp.hotmail.com和你的凭据。我的主要帐户是gmail帐户,因此我可以通过smtp.gmail.com使用它,当然还需要我的凭据。

我想我现在明白了。我已经在IIS中将SMTP服务器指定为本地主机,因此我的Web应用程序将向本地主机上的STMP应用程序发送邮件,然后进行中继。但是我需要先设置一个应用程序来完成这个过程。这样说对吗? - Joe

2

我使用Gmail作为我的网关时遇到了几个问题。您必须在代码中实现多次重试。 - Eduardo Molteni

0

与其尝试在本地设置SMTP,为什么不直接配置SMTP连接通过hotmail直接发送邮件呢?只需将配置元素添加到web.config中以启用所有功能即可。

编辑

我认为我写的这篇文章可能会对你有所帮助。


@Joe - 你可以在声明SMTP客户端时指定凭据,或者使用<system.net> web.config部分进行操作。我已经在帖子中添加了一个链接。 - Mitchel Sellers

-1

尝试显式设置SmtpClient的主机。

例如:
SmtpClient mailClient = new SmtpClient();

mailClient.Host = "127.0.0.1";

mailClient.Send(message);


他已经成功连接到本地主机,只是没有被接受。 - Wyatt Barnett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接