【发布时间】:2017-10-04 11:17:18
【问题描述】:
我有一个在 Windows Server 2008 机器上的 IIS 7 下运行的 ASP.NET 4 应用程序。该应用程序使用 System.Net.Mail 类通过 SMTP 服务器发送电子邮件。我正在使用端口 587 进行 SSL 连接。当我从服务器内浏览应用程序时,电子邮件发送正常。但是,当我从远程(客户端)计算机浏览到应用程序时,电子邮件发送失败,SmtpException 具有StatusCode = GeneralFailure。消息说无法连接 SMTP 服务器,并且有一个内部 SocketException。
服务器正在运行 F-Secure 防病毒系统。我尝试禁用它,但错误仍然存在。
电子邮件发送是否有效取决于我访问网络服务器的方式:
- 如果我使用服务器的公开可用 DNS 名称从远程客户端浏览到 http://myapp.mydomain.com,则会失败。
- 如果我从远程客户端浏览到http://193.144.xxx.xxx/myapp,使用服务器的公共 IP 地址加上 IIS 中的 Web 应用程序的名称,那么它也会失败。
- 如果我从远程客户端浏览到http://internal-name/myapp,使用域中服务器的内部名称加上 IIS 中的 Web 应用程序的名称通过 VPN,那么它可以工作!
- 如果我从服务器本身的交互式会话中浏览,无论我如何(公共 DNS 名称、公共 IP 地址、内部域名或只是
localhost),它也可以工作。 从服务器浏览时邮件发送如何工作,但远程浏览时却不行?在这两种情况下,发送电子邮件的服务器都是同一台服务器。
如果我从 Visual Studio 中浏览我的开发机器上的应用程序,那么一切正常。
也请看这个:https://serverfault.com/questions/845606/iis-randomly-returning-inet-e-resource-not-found
编辑。服务器有一个私有 IP 地址供内部使用,以及一个公共 DNS 解析到的公共 IP 地址。此公网 IP 地址未在服务器本身上配置;相反,它是由我们的互联网接入提供商提供的转发服务。是否有可能 SMTP 服务器对连接请求来自声称具有地址但名称解析为不同地址的客户端的事实感到困惑?
有什么想法吗?谢谢。
【问题讨论】:
-
听起来像是权限问题。你确定你是在比较苹果和苹果吗?意思是你在服务器内部运行localhost 与在服务器外部使用的 url 相比
-
否;在这两种情况下,我都使用完全相同的 URL 来访问服务器。另请参阅:serverfault.com/questions/845606/…;这两个问题可能相关。
-
找出问题是否是 F-Secure 的最简单方法是暂时禁用该程序并对其进行测试。我过去遇到过 SMTP 问题,解决方案通常是确保“应用服务器”在“SMTP 服务器”中具有正确的权限。
-
我会在星期一这样做。但是,如果 F-Secure 干扰了 SMTP 连接,无论我从哪里浏览 Web 应用程序,它都应该这样做。但只有当我从远程客户端浏览时它才会失败。
-
您可以尝试在 ASP .Net 环境之外从 PowerShell 脚本或控制台 Apo 或 LinqPad 等来源发送测试电子邮件。
标签: asp.net email smtpclient