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上的實際SMTP命令/響應流量,您將不可能準確地區分出錯的地方。
關於SSL/TLS錯誤特別是幾個不同的事情之一可能發生,這取決於你TIdSMTP
配置:
1),你可能會得到一個一般EIdSocketError
異常升高,喜歡與你11004
錯誤。
2)如果你連接到需要隱式SSL/TLS服務器端口可能會遭到EIdSMTPReplyError
異常與畸形的錯誤代碼,但你不必TIdSMTP.UseTLS
設置爲utUseImplicitTLS
。
2)如果已指定UseTLS=utUseImplicitTLS
但服務器不期望隱式SSL/TLS,則可能會收到EIdOSSLConnectError
或其他與OpenSSL相關的異常。
3)您有UseTLS
設置爲utUseExplicitTLS
或utRequiresTLS
和服務器支持TLS明確,但SSL/TLS握手因任何原因而失敗,你會得到一個TIdSMTP.OnTLSHandShakeFailed
事件觸發僅供utUseExplicitTLS
。如果事件處理程序未設置VContinue=True
,或者您使用了utRequiresTLS
,則會出現EIdTLSClientTLSHandShakeFailed
異常。
4)您有UseTLS
設置爲utUseExplicitTLS
或utRequiresTLS
和服務器不支持TLS明確,你會得到一個TIdSMTP.OnTLSNotAvailable
事件觸發僅utUseExplicitTLS
。如果事件處理程序未設置VContinue=True
,或者您使用utRequiresTLS
,則會收到EIdTLSClientTLSNotAvailable
異常。
@tlama顯示了什麼?我在這個線程中看不到它。 – nurettin
@nurettin:我更新了答案以顯示它。 –