EIdSMTPReplyError
为响应来自 SMTP 协议层的 SMTP 服务器的错误消息而引发。 11004
是套接字/DNS 错误,而不是 SMTP 错误。除了基本的操作系统错误消息(您可以从中获得SysErrorMessage()
)之外,没有其他可用的错误信息:
请求的名称有效并且在数据库中找到,但它没有正确的关联数据正在解析。
关于TIdSMTP.Send()
,您可以查找EIdSMTPReplyError
例外情况,例如:
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)如果您已分配但服务器不期望隐式 SSL/TLS,您可能会得到一个EIdOSSLConnectError
或其他与 OpenSSL 相关的异常。UseTLS=utUseImplicitTLS
3) 您已UseTLS
设置为utUseExplicitTLS
orutRequiresTLS
并且服务器支持显式 TLS,但 SSL/TLS 握手无论出于何种原因失败,您将收到TIdSMTP.OnTLSHandShakeFailed
仅针对utUseExplicitTLS
. 如果未设置事件处理程序VContinue=True
,或者您使用utRequiresTLS
了 ,您将引发EIdTLSClientTLSHandShakeFailed
异常。
4)您已UseTLS
设置为utUseExplicitTLS
orutRequiresTLS
并且服务器不支持显式 TLS,您将获得仅TIdSMTP.OnTLSNotAvailable
触发的事件utUseExplicitTLS
。如果未设置事件处理程序VContinue=True
,或者您使用utRequiresTLS
了 ,那么您将EIdTLSClientTLSNotAvailable
引发异常。