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]|
理由はわかりませんが、これは認証失敗メッセージのようです。