2012-11-13 2 views
4

자바 메일 API를 사용하여 IMAP 클라이언트를 구현하고 있습니다. 내가 원하는 것은 메일 개수와 메일에 대한 변경 사항 (읽음/읽지 않음 등)에 대한 알림입니다. 다음과 같이이를 위해, 나는 열린 IMAP 폴더에 대한 두 개의 리스너를 썼다 :IMAP messageChangedListener()가 실행되지 않습니다.

IMAPStore imapStore = (IMAPStore) session.getStore("imaps"); 
     imapStore.connect(); 

final IMAPFolder folder = (IMAPFolder) imapStore.getFolder("Inbox"); 
     folder.open(IMAPFolder.READ_WRITE); 

folder.addMessageCountListener(new MessageCountListener() { 

      public void messagesAdded(MessageCountEvent e) { 
       System.out.println("Message Count Event Fired"); 
      } 

      public void messagesRemoved(MessageCountEvent e) { 
       System.out.println("Message Removed Event fired"); 
      } 
     }); 

folder.addMessageChangedListener(new MessageChangedListener() { 

      public void messageChanged(MessageChangedEvent e) { 
       System.out.println("Message Changed Event fired"); 
      } 
     }); 

을 다음과 같이 I는 별도의 스레드에서 서버에 IMAP IDLE 명령을 보내고있다.

그러나 새 메일이 오거나 메일이 삭제 될 때마다 "MessageCountListener"가 실행되는 문제가 있습니다. 그러나 메일 변경이 발생하면 "MessageChangedListener"가 시작되지 않습니다.

답변

6

JavaMail은 알림을 전송할 서버에 따라 다릅니다. IMAP 스펙은 서버가 알림을 보낼 때나 보내는 경우 상당한 유연성을 허용합니다. 일부 서버는 IMAP 사양을 완벽하게 준수하지는 않습니다. 세션 디버깅을 켜고 프로토콜 추적을 검사하여 서버에서 알림을 보내고 있는지 확인할 수 있습니다.

어떤 서버를 사용하고 있습니까?

+0

댓글 Shannon에게 감사드립니다. Gmail 계정을 사용하여 테스트하고 있습니다. 그들이 시설을 제공하기를 바랍니다. –

+1

네가 맞습니다. 나는 다른 IMAP 서버로 시도하고 잘 작동했다. 놀랍게도 Google이 메시지 변경 알림을 제공하지 않는 것 같습니다. 그걸 해결하는 방법에 대한 아이디어가 있습니까? –

+1

JavaMail 위키에서 [JavaMail과 함께 Gmail 사용] (http://kenai.com/projects/javamail/pages/Gmail)과 관련된 몇 가지 문제점을 찾을 수 있습니다. 또한 Gmail 도움말 페이지에서 [Gmail IMAP 구현의 제한 사항] (http://support.google.com/mail/bin/topic.py?hl=ko&topic=1668982&parent=1668981&ctx=topic) 목록을 찾을 수 있습니다. . –

2

마지막으로 나는 해결책을 얻었다.

Gmail 계정의 경우. Gmail 설정 페이지에서 "새 메일 알림 사용"을으로 설정해야합니다.

+1

이것은 나에게 어떤 행동도 변경하지 않았습니다. – djechlin

관련 문제