I am implementing an IMAP client using the java mail API. I want to be notified of the number of letters and changes (Read / Unread, etc.) Performed for mail. For this, I wrote two listeners for an open IMAP folder as follows:
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"); } });
And I send the IMAP IDLE command to the server in a separate thread as follows.
Thread t = new Thread(new Runnable() { public void run() { try { while (true) { folder.idle(); } } catch (MessagingException ex) {
But the problem is that the "MessageCountListener" is launched every time new mail arrives or mail is deleted. But when the mail change occurred, the "MessageChangedListener" does not start.
source share