2012-06-14 3 views
0

Pop3Folder을 성공적으로 열고 메시지를 검색하면 folder.isOpenfalse 인 경우 가끔 가끔 나타납니다. 동시에, 디버그 모드에서 Pop3Folder의 필드를 보면 opened 필드가 true으로 설정되어있는 것을 볼 수 있습니다.JavaMail - Pop3Folder가 실수로 닫힘

누군가 나에게 힌트를 줄 수 있습니까? 여기에 잘못 될 수 있습니다. 당신의 processMessage를 방법이 너무 오래 걸리는 경우 서버는 연결 시간이 초과 될 수 있습니다

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

답변

1

: 여기

는 코드입니다. 세션 디버깅을 켜고 프로토콜 추적에서 단서를 확인하십시오.

+0

감사합니다. 이것에 대해 살펴 보겠습니다. – jFrenetic

+0

디버깅을 사용하지 않았지만 약 2 분 동안 메시지를 처리 ​​한 후 폴더가 결국 닫히게됩니다. 예, 서버 연결 시간 초과 가능성이 큽니다. 다시 한 번 감사드립니다! – jFrenetic