public void start(String folderName) throws Exception { executorService = Executors.newSingleThreadExecutor(); Folder folder = mailService.ensureOpenFolder(folderName); folder.addMessageCountListener(new MessageCountAdapter() { @Override public void messagesAdded(MessageCountEvent event) { List<Message> messages = Arrays.asList(event.getMessages()); handlers.forEach(handler -> handler.accept(messages)); } }); if (supportsIdle(folder)) { notificationWorker = new IdleNotificationWorker(mailService, (IMAPFolder) folder); } else { notificationWorker = new PollNotificationWorker(mailService, folder, configuration.getNotificationLookupTime()); } LOGGER.debug("start notification service: {}", notificationWorker); executorService.submit(notificationWorker); }
private static void closeFolder(Folder folder, MessageCountAdapter messageListener) { if (folder != null) { if (messageListener != null) { folder.removeMessageCountListener(messageListener); } try { folder.close(false); } catch (MessagingException e) { Log.error("Error closing folder", e); } } }