0

を正常に開き、そこからメッセージを取得した後、 が返さPop3Folderれるときにポイントに到達することがあります。同時に、デバッグ モードで のフィールドを見ると、フィールドが に設定されていることがわかります。 folder.isOpenfalsePop3Folderopenedtrue

ここで何がうまくいかないのか、誰かが私にヒントを与えることができますか?

コードは次のとおりです。

public void popMail(MessageProcessor messageProcessor) throws MessagingException {
  Folder inboxFolder = null;
  Store store = null;
  try {
    store = mailSession.getStore();
    store.connect(mailSession.getProperty("mail.user"),
        mailSession.getProperty("mail.password"));
    // OK. Connected to POP3 Store.
    inboxFolder = store.getFolder("inbox");
    inboxFolder.open(Folder.READ_WRITE);
    // The folder is successfully opened.
    Message[] msgs = inboxFolder.getMessages();
    // Messages are successfully retrieved.
    if (msgs != null && msgs.length > 0) {
      for (Message msg : msgs) {
        if (messageProcessor != null) {
          // Calling custom listener to process message
          messageProcessor.processMessage(msg);
        }
        msg.setFlag(Flag.DELETED, true);
      }
    }
  } finally {
    // Oops, inboxFolder.isOpen returns false.
    // Meanwhile I see in debug mode that inboxFolder#opened is set to true
    if (inboxFolder != null && inboxFolder.isOpen()) {
      try {
        inboxFolder.close(true);
      } catch (MessagingException e) {
        log.warn("Error while closing folder");
      }
    } if (store != null) {
        try {
          store.close();
        } catch (MessagingException e) {
          log.warn("Error while closing store");
        }
      }
    }
}
4

1 に答える 1

1

processMessage メソッドに時間がかかりすぎると、サーバーが接続をタイムアウトしている可能性があります。セッションのデバッグをオンにして、プロトコル トレースで手がかりを調べます。

于 2012-06-14T20:21:04.410 に答える