Rob*_*ler 3 delphi email smtp indy
我有一个Delphi 6应用程序,它发送带有附件的电子邮件.当我第一次测试它时,我在调用TIdSmtp.Connect()时遇到了11004错误(策略违规).事实证明我的电子邮件服务器SMTP设置错误,现在它工作正常.但是知道我的用户会遇到麻烦,我想知道是否有办法通过Indy组件从SMTP服务器获取更广泛的错误信息,以帮助我调试工作.我使用Indy 9和Delphi 6.
有没有办法获得更丰富的报告,并找出错误的可能原因是什么?(例如 - 需要SSL,来自未填写的字段,拒绝的域等).同样的问题,但是当TIdSmtp.Send()方法发生错误时?
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;
Run Code Online (Sandbox Code Playgroud)
这将有所帮助,如果服务器支持扩展错误代码,那么你可能会更接近一些.但更多时候没有,如果不通过线路查看实际的SMTP命令/响应流量,您将无法完全区分出错的地方.
特别是关于SSL/TLS错误,可能会发生以下几种不同的事情之一,具体取决于您的TIdSMTP配置:
1)您可能会收到一般EIdSocketError异常,例如您的11004错误.
2)EIdSMTPReplyError如果连接到需要隐式SSL/TLS但尚未TIdSMTP.UseTLS设置为的服务器端口,则可能会出现格式错误的异常错误代码utUseImplicitTLS.
2)EIdOSSLConnectError如果已UseTLS=utUseImplicitTLS分配但服务器不期望隐式SSL/TLS,则可能会收到与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引发异常.
| 归档时间: |
|
| 查看次数: |
3629 次 |
| 最近记录: |