3

我使用 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 dll (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: Command received in Invalid state。

|IdReplyIMAP4.pas   |TIdReplyIMAP4   |RaiseReplyError               |242[1]  |
|IdTCPConnection.pas|TIdTCPConnection|RaiseExceptionForLastCmdResult|576[1]  |
|IdIMAP4.pas        |TIdIMAP4        |Login                         |1970[29]|
|IdIMAP4.pas        |TIdIMAP4        |Connect                       |2019[28]|

这似乎是一个身份验证失败的消息,虽然我不知道为什么。

4

3 回答 3

1

尝试使用sslvTLSv1而不是sslvSSLv23.

于 2012-09-19T19:46:08.473 回答
1

固定的!

两个关键设置错误:

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

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

于 2012-09-20T15:23:20.103 回答
0

最新的 Indy 10 版本在 TLS、SSL、IMAP、SMTP 和 SASL 方面的性能比 Delphi 2007 中发布的要好得多。哎呀,Delphi 2007 在 2006 年的某个时候发布,所以 Indy 10 版本是来自2006 年,那是六年前的事了。

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

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

于 2012-09-20T00:30:13.430 回答