我使用Delphi 2007和Indy 10 (10.5.8.0)编写了一个Windows服务,通过IMAP连接到电子邮件服务器,读取10封电子邮件进行处理并断开连接。这个过程会在一天中多次重复。
只要服务没有使用SSL/TLS连接,这个方法就可以正常工作。
当使用TLS进行连接时,第一次连接似乎可以成功,但在后续尝试中会出现“start SSL negotiation failed”错误。
我在我的服务中使用以下Indy设置:
FIMAP4.Port := 143
FIMAP4.UseTLS := utUseRequireTLS;
FIdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv23;
电子邮件服务器运行Exchange 2010,使用TLS协议在端口143上运行,使用SSL协议在端口993上运行。我正在使用最新版本的ssl dlls(1.0.1.3)。
我是通过执行以下操作来断开连接的:
FIMAP4.IOHandler.InputBuffer.Clear;
FIMAP4.Disconnect;
更新:
EurekaLog 中的提取信息:
|IdExplicitTLSClientServerBase.pas|TIdExplicitTLSClient|TLSNotAvailable |416[4] |
|IdExplicitTLSClientServerBase.pas|TIdExplicitTLSClient|TLSNotAvailable |412[0] |
|IdExplicitTLSClientServerBase.pas|TIdExplicitTLSClient|ProcessTLSNotAvail|342[2] |
|IdExplicitTLSClientServerBase.pas|TIdExplicitTLSClient|ProcessTLSNotAvail|341[1] |
|IdIMAP4.pas |TIdIMAP4 |Login |1957[16]|
|IdIMAP4.pas |TIdIMAP4 |Connect |2019[28]|
这似乎表明TLS不可用(我本来希望TLSNotAvailable会引发异常)
EIdTLSClientTLSNotAvailable.Create(RSTLSSLSSLNotAvailable);
相比之下,使用
不是
的。EIdTLSClientTLSNotAvailable.Create(RSTLSSLSSLCmdFailed);
但这使我想知道电子邮件服务器是否不支持TLS,至少在端口143上。 如果我不使用TLS,我会得到一个:EIdReplyIMAP4Error:在无效状态下收到的命令。
|IdReplyIMAP4.pas |TIdReplyIMAP4 |RaiseReplyError |242[1] |
|IdTCPConnection.pas|TIdTCPConnection|RaiseExceptionForLastCmdResult|576[1] |
|IdIMAP4.pas |TIdIMAP4 |Login |1970[29]|
|IdIMAP4.pas |TIdIMAP4 |Connect |2019[28]|
这似乎是一个身份验证失败的消息,尽管我不确定原因。