Indy IMAP4 over SSL

时间:2012-09-19 15:22:40

标签: delphi imap indy

我使用Indy 10(10.5.8.0)在Delphi 2007中编写了一个Windows服务,它通过IMAP连接到电子邮件服务器并读取10封电子邮件,处理它们并断开连接。 这一天全天重复。 只要服务无法使用SSL / TLS连接,这种方法就可以正常工作。

使用TLS连接时,它似乎第一次工作,但在后续尝试中出现“启动SSL协商失败”错误。 我在我的服务中使用以下Indy设置:

FIMAP4.Port := 143
FIMAP4.UseTLS := utUseRequireTLS;
FIdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvSSLv23;

电子邮件服务器运行Exchange 2010并在端口143上运行TLS,在端口993上运行SSL。 我正在使用最新版本的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 NOT 可用(我原本期望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]|

这似乎是一个身份验证失败的消息,虽然我不确定原因。

3 个答案:

答案 0 :(得分:1)

尝试使用sslvTLSv1代替sslvSSLv23

答案 1 :(得分:1)

固定!

两个关键设置错误:

FIdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1;
FIMAP4.UseTLS := utUseImplicitTLS;

设置这些(仍在端口143上)解决了这个问题。

答案 2 :(得分:0)

最新的Indy 10版本在TLS,SSL,IMAP,SMTP和SASL方面比在Delphi 2007中提供的版本好得多。哎呀,Delphi 2007在某些时候出货,所以Indy 10版本是从2006年开始的快照,即六年前的情况。

升级您的Indy10源,然后尝试不同的SSL选项。

您可能还有一个错误的SSL(ssleay,libssl)DLL版本。使用Indy页面上推荐的版本。