【问题标题】:Invalid HELO name on sending with TIDSmtp使用 TIDSmtp 发送时 HELO 名称无效
【发布时间】:2020-01-20 12:30:57
【问题描述】:

在使用 Delphi 2007 和 Indy 10.6.2.0 时,尝试在特定帐户中使用 TIdSMTP 时出现以下错误:

访问被拒绝 - HELO 名称无效(请参阅 RFC2821 4.1.1.1)

这是我第一次看到这个错误。其他帐户发送没有问题。由于安全原因,我无法提供凭据,但该帐户位于端口 587 上并使用 SSL 和以下选项:

SSLOptions.Method := sslvTLSv1;
SSLOptions.VerifyMode := [];
SSLOptions.VerifyDepth := 0;
OnStatusInfo := ssl1statusinfo;

【问题讨论】:

  • 您是否为TIdSMTP.HeloName 指定了名称?有些服务器需要这个。
  • @whosrdaddy 不,我应该分配什么?
  • 没关系,可能 smtp 服务器需要身份验证。您是否使用电子邮件客户端(如 Mozilla Thunderburd)验证和测试您实际上可以发送电子邮件?
  • 你试过其他库吗?我个人结束了用 Ararat Synapse 库做 SMTP。它很简单,甚至可能是准系统,但是因为如果我可以调试它的代码并查看它在内部的工作方式等等。每次我看 Indy 时,我都觉得这是一个巨大的过度工程,就像一个我可能找不到出口的迷宫 :-)
  • 然后使用 Microsoft Network Monitor 或 WireShark 之类的工具来拦截和解析 SMTP 流量。查看 Thunderbird 和您的应用程序发送了哪些 HELO 和其他命令,并考虑差异。您可能需要暂时关闭 SSL,或者这些实用程序可能有 TLS MITM 模块,不知道

标签: delphi indy indy10


【解决方案1】:

正如@whosrdaddy 在 cmets 中所说,TIdSMTP.HeloName 是您错误的解决方案。这不是身份验证或 SSL 问题。将HeloName 设置为代表您的客户端的适当DNS 主机名,例如来自GetComputerNameEx(),或者至少是您的公共IP 地址。如果您没有设置HeloNameTIdSMTP 将使用本地计算机的主机名或计算机名,这可能是也可能不是 SMTP 服务器接受的正确 DNS 格式,具体取决于配置。有些服务器不关心这一点,但有些则关心。

【讨论】:

  • 谢谢,但我尝试使用我的主机名、本地 ip 和公共 ip 设置 TIDSmtp.HeloName,但没有成功,同样的错误仍然存​​在:X
  • 也许我可以将凭据发送给您,以便您调试为什么不发送?
  • @delphirules 否,因为错误发生在身份验证发生之前,在客户端和服务器相互问候时的初始 SMTP 握手期间,因此凭据无关紧要。而且我的主机名将与您的不同。您可能必须联系服务器管理员并询问为什么您的客户端被拒绝访问。也许服务器使用了允许机器的白名单,而您的机器不在列表中。
  • 这不太可能,因为简单地使用 Thunderbird 没有任何特殊设置,它会工作......我发现这个话题:techieshelp.com/…,也许是相关的?
  • 我联系了电子邮件提供商,他们说对 HELO 没有特殊要求... TIdSmtp 似乎缺少某些内容
猜你喜欢
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多