无法连接到远程邮件服务器以在 ASP.NET 中发送电子邮件

无法连接到远程邮件服务器以在 ASP.NET 中发送电子邮件

我想将 Web 应用程序从 Windows Server 2003 迁移到 Windows Server 2008 R2。除了从应用程序发送电子邮件外,其他一切正常。

如果我将应用程序配置为使用“localhost”上的 smtp 服务器,它可以正常工作,但将其更改为“真实”主机名(例如 mail.example.org)则不会发送任何邮件。错误消息表明远程服务器需要安全连接或 smtp 身份验证。但由于它在使用“localhost”而不是主机名时可以正常工作,所以我怀疑这不是问题所在。

另外,这不太可能是邮件服务器的问题,我也尝试了另一个邮件服务器。

所以对我来说,防火墙似乎阻止了与邮件服务器的传出连接。我尝试打开端口 25,但仍然不起作用。也许我只是做错了。


更新: 为了澄清我的设置:

  • 我有一台安装了 hMailServer 的 Windows Server 2008 R2(为一些托管域设置)
  • 对于我所谈论的网站,我需要使用外部邮件服务器(完全不同的托管服务提供商)

显然我有点跑题了。使用主机名“localhost”或“mail.somedomain.com”(而我的邮件服务器中设置了somedomain.com)连接到本地邮件服务器时,它似乎可以正常工作。但是当使用外部邮件服务器的主机名(“mail.externaldomain.com”)时,它似乎会尝试再次连接到本地服务器,尽管邮件服务器中没有设置此域。感谢 Evan Anderson 提供的使用 telnet 的提示 - 为什么我自己没有想到呢?... :-)

请注意,网站 www.externaldomain.com 托管在我的服务器上,但 DNS 条目由其他托管服务提供商维护。“externaldomain.com”是唯一指向我的服务器的条目,所有其他记录(MX、子域)都指向其他服务器。

所以我认为现在的问题是,我如何让我的服务器连接到外部邮件服务器。我必须在我的邮件服务器中配置它吗?还是这是 Windows 服务器的问题?

答案1

嗅探流量(使用 Wireshark 或Microsoft 网络监视器) 并查看实际发生的情况。当您尝试发送电子邮件时,您可能可以通过netstat -a -n 1 | find ":25"服务器上运行的窗口来了解是否正在建立与邮件服务器的 TCP 连接,但我会选择嗅探器路线并将其搁置。

SMTP 服务器需要身份验证。您应该“手动”运行 SMTP 事务和 TELNET,以查看发生了什么。(您确实应该知道如何做SMTP 传输通过 TELNET...)从您的服务器执行此操作还有额外的好处,即证明 Windows 防火墙没有阻止出站 SMTP 连接尝试。

查看线路上的流量并找出问题的根源,而不是用棍子去戳它。

答案2

如果是防火墙,您就不会收到错误消息。正在尝试连接,但未成功。旧的 W2K3 服务器如何配置以将电子邮件发送到电子邮件服务器?W2K3 服务器是否在电子邮件服务器的“允许中继”列表中?如果是,那么您还需要添加 W2K8 服务器。检查 W2K3 服务器的配置以了解身份验证设置等,并将 W2K8 服务器上的设置设置为匹配。

答案3

我终于解决了这个问题……防火墙、IIS 和邮件服务器都没有导致错误。我的托管服务提供商 DNS 中有一些多余的条目。这导致应用程序尝试连接到本地邮件服务器而不是远程邮件服务器。删除错误的 DNS 条目后,一切正常。

问题是,我的域名的 DNS 条目由另一个托管服务提供商维护,但由于我的提供商的 DNS 中也有这个域名的条目,因此它们对我的 Web 服务器具有优先权。

因此,如果您遇到类似问题,请始终考虑对似乎无法正常工作的远程主机执行 ping 操作。并且不要忘记在更正 DNS 条目后刷新服务器 DNS 缓存(在命令提示符中键入“ipconfig /flushdns”)

相关内容