【问题标题】:Cannot use smtpclient to send mail with localhost iis site无法使用 smtpclient 通过 localhost iis 站点发送邮件
【发布时间】:2008-11-28 22:52:55
【问题描述】:

我有一个在本地 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 服务器?
  • 我认为这是我的问题的一部分。我打开 IIS 管理器并将 SMTP 服务器设置为 localhost,但它仍然无法正常工作。还有什么需要配置的吗?
  • 你能telnet到你本地机器上的25端口吗?你在运行什么操作系统?你在本地机器上有防火墙吗?
  • 我正在运行 vista home premium。我确实有防火墙,但由于连接是传出的,这有关系吗?另外,我不确定如何开始使用 telnet。

标签: asp.net-mvc sockets system.net.mail


【解决方案1】:

根据您对 Joe 以上我的 cmets 的回答,您没有在本地计算机上启用 SMTP。 Vista 不附带 SMTP。

因此,您要么必须安装将在 Vista 上运行的第 3 方 SMTP 应用程序,要么使用其他应用程序发送邮件,在这种情况下,您的 Hotmail 帐户可能允许您通过它发送邮件。我不使用 Hotmail,所以不知道它是否会,但它应该类似于 smtp.hotmail.com 和您的凭据。我的主要帐户是 gmail 帐户,因此我可以通过 smtp.gmail.com 使用它,当然还有我的凭据。

【讨论】:

  • 我想我现在明白了。我已在 IIS 中将 SMTP 服务器指定为 localhost,因此我的 webapps 会将邮件发送到 localhost 上的 STMP 应用程序,并在该应用程序中进行中继。但我需要先设置一个应用程序来做到这一点。听起来对吗?
【解决方案2】:

为了在本地机器上进行开发,您还可以使用放置文件夹:

http://www.codersbarn.com/post/2008/11/30/ASPNET-Contact-Form.aspx

【讨论】:

  • 我在使用 gmail 作为网关时遇到了几个问题。您必须在代码中实现多次重试。
【解决方案3】:

与其尝试在本地设置 SMTP,不如将 SMTP 连接配置为直接通过 hotmail 发送,只需将配置元素添加到 web.config 即可启用一切。

编辑

我认为我不久前写的 this article 可能会对您有所帮助。

【讨论】:

  • @Joe - 您可以在声明 SMTP 客户端时指定凭据,也可以使用 web.config 部分。添加了帖子的链接
【解决方案4】:

尝试显式设置 SmtpClient 的主机。

例如:
SmtpClient mailClient = new SmtpClient();

mailClient.Host = "127.0.0.1";

mailClient.Send(消息);

【讨论】:

  • 他已经成功连接到他的本地主机,只是没有被接受。
猜你喜欢
  • 2013-12-04
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
相关资源
最近更新 更多