0
Session l_session = Session.getDefaultInstance(l_props);
final Store l_store = l_session.getStore(l_protocol);
l_store.connect(a_req.getServer(), a_req.getPort(), a_req.getUsername(), a_req.getPassword());

POP3サーバーへのTCP接続は確立されますが、サーバーからの最初の「OK」は受信されません。ある種のタイムアウト例外が欲しいのですが、プログラムは永遠に待機します。デバッグ出力は次のようになります

DEBUG: setDebug: JavaMail version 1.4.1
DEBUG: getProvider() returning javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsy stems, Inc]
DEBUG POP3: connecting to host "localhost", port 9898, isSSL false

mail.pop3.timeoutとmail.pop3.connectiontimeoutを適切な値に設定しましたが、タイムアウトがスローされることはありません。この状況でタイムアウトさせるにはどうすればよいですか?

ストアに接続されたConnectionListenerを使用し、接続が確立されたときにフラグを設定する(最初のOKとクレデンシャルの後にあるように見える)非常に大雑把な回避策と、別のウォッチャースレッドがあります。Storeのclose()メソッドはsynchronized()のように見えるので、長すぎることを検出したときにSystem.exit(1)を呼び出します。

Linuxコマンド「nc-l9898」を使用して、「OK」で応答しないPOP3サーバーをシミュレートします。

4

1 に答える 1

1

Session.getDefaultInstanceをSession.getInstanceに変更してみてください。違いについてはjavadocsを読んでください-プロパティ設定が無視される可能性があります。

比較的古いバージョンのJavaMailを使用しているため、アップグレードしてみて、それが役立つかどうかを確認できます。mail.pop3.timeoutプロパティがそれを行う必要があります。

于 2012-04-18T19:33:50.760 に答える