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);

しかし、これにより、電子メールサーバーが少なくともポート 143 で TLS をサポートしていないかどうか疑問に思いました)。

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

修理済み!

2つの重要な設定が間違っていました:

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

これらを設定すると(ポート143のまま)、問題は解決しました。

于 2012-09-20T15:23:20.103 に答える
1

sslvTLSv1の代わりに使ってみてくださいsslvSSLv23

于 2012-09-19T19:46:08.473 に答える
0

最新の Indy 10 バージョンは、TLS、SSL、IMAP、SMTP、および SASL で、Delphi 2007 で出荷されたものよりもはるかに優れています。ほら、Delphi 2007 は 2006 年に出荷されたので、Indy 10 バージョンは2006 年、それは 6 年前のことです。

Indy10 ソースをアップグレードしてから、別の SSL オプションを試してください。

また、SSL (ssleay、libssl) DLL のバージョンが正しくない可能性もあります。Indy ページで推奨されているバージョンを使用してください。

于 2012-09-20T00:30:13.430 に答える