【发布时间】: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 模块,不知道