gpt4 book ai didi

delphi - 使用 TIdSmtp.Connect() 方法发生错误 11004 时获取扩展错误信息?

转载 作者:行者123 更新时间:2023-12-03 15:48:46 27 4
gpt4 key购买 nike

我有一个 Delphi 6 应用程序,可以发送带有附件的电子邮件。当我第一次测试它时,当我调用 TIdSmtp.Connect() 时,我收到了 11004 错误(违反策略)。原来我的电子邮件服务器 SMTP 设置是错误的,现在可以正常工作了。但我知道我的用户将会遇到麻烦,我想知道是否有一种方法可以通过 Indy 组件从 SMTP 服务器获取更广泛的错误信息,以帮助我进行调试工作。我正在使用 Indy 9 和 Delphi 6。

有没有办法获得更丰富的报告并找出错误的可能原因是什么? (例如 - 需要 SSL、未填写发件人字段、拒绝域等)。另外,同样的问题,但是当 TIdSmtp.Send() 方法发生错误时?

最佳答案

EIdSMTPReplyError为响应来自 SMTP 协议(protocol)层 SMTP 服务器的错误消息而引发。 11004是套接字/DNS 错误,而不是 SMTP 错误。除了基本操作系统错误消息(您可以从 SysErrorMessage() 获取)之外,没有其他可用的错误信息:

The requested name is valid and was found in the database, but it does not have the correct associated data being resolved for.

关于TIdSMTP.Send() ,您可以查找EIdSMTPReplyError异常(exception),例如:

try
IdSMTP1.Connect;
try
IdSMTP1.Send(IdMessage1);
finally
IdSMTP1.Disconnect;
end;
except
on E: EIdSMTPReplyError do
Application.MessageBox(
PChar(
'Error message: ' + E.Message + sLineBreak +
'Error code: ' + IntToStr(E.ErrorCode) + sLineBreak +
'Error reply: ' + E.EnhancedCode.ReplyAsStr
),
'SMTP Error...', MB_OK + MB_ICONSTOP + MB_TOPMOST);
end;

这会对一些人有所帮助,如果服务器支持扩展错误代码,那么您可能会更接近一些。但更多时候,如果不查看线路上的实际 SMTP 命令/响应流量,您可能无法准确地区分出了问题。

特别是关于 SSL/TLS 错误,可能会发生几种不同的情况之一,具体取决于您的 TIdSMTP配置:

1) 你可能会得到一个将军EIdSocketError引发异常,就像您的 11004 一样错误。

2) 您可能会得到 EIdSMTPReplyError如果您连接到需要隐式 SSL/TLS 但没有 TIdSMTP.UseTLS 的服务器端口,则会出现异常,并显示格式错误的错误代码设置为utUseImplicitTLS .

2) 您可能会得到 EIdOSSLConnectError或其他与 OpenSSL 相关的异常,如果您有 UseTLS=utUseImplicitTLS已分配,但服务器不期望隐式 SSL/TLS。

3) 你有UseTLS设置为 utUseExplicitTLSutRequiresTLS并且服务器支持显式 TLS,但 SSL/TLS 握手由于某种原因失败,您将得到 TIdSMTP.OnTLSHandShakeFailed仅针对 utUseExplicitTLS 触发事件。如果事件处理程序未设置 VContinue=True ,或者您使用 utRequiresTLS ,您将得到 EIdTLSClientTLSHandShakeFailed引发异常。

4) 你有 UseTLS设置为 utUseExplicitTLSutRequiresTLS并且服务器不支持显式 TLS,您将得到 TIdSMTP.OnTLSNotAvailable utUseExplicitTLS 触发事件仅有的。如果事件处理程序未设置 VContinue=True ,或者您使用 utRequiresTLS ,然后您将得到 EIdTLSClientTLSNotAvailable引发异常。

关于delphi - 使用 TIdSmtp.Connect() 方法发生错误 11004 时获取扩展错误信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com