Java-почта, обновить несколько статусов электронной почты (ВИДЕТЬ и НЕВИДЕТЬ) за один раз? ⇐ JAVA
-
Anonymous
Java-почта, обновить несколько статусов электронной почты (ВИДЕТЬ и НЕВИДЕТЬ) за один раз?
Я использовал Java-почту для обновления статуса электронной почты (ВИДЕНО и НЕВИДИМО) для 100 писем за один раз. У меня есть бэкэнд (Java-приложение с пружинной загрузкой), я использую почтовый API Java для обновления флагов SEEN и UNSEEN для 100 электронных писем, и для этого я использовал ExecuterService. Во внешнем интерфейсе (угловом) пользователь выбирает 100 электронных писем и обновляет статус электронного письма (видно-невидимо). Когда пользователь обновляет веб-страницу, поскольку исполнитель не завершил свою задачу, частичные данные об обновлениях API отображаются в пользовательском интерфейсе, и снова, когда выполненная служба завершена, данные в пользовательском интерфейсе очищаются. Как это исправить?
В приложении электронной почты я хочу отображать данные, как в Gmail, при выборе параметра «Отметить как прочитанное» или «Непрочитанное» для нескольких писем. Даже после того, как пользователь обновит электронное письмо, отображаются те же старые данные.
int threadCount = 4; // Вы можете настроить это в соответствии с вашими требованиями ExecutorService executorService = Executors.newFixedThreadPool(threadCount); // Создаем CountDownLatch с количеством потоков CountDownLatch latch = новый CountDownLatch(threadCount); пытаться { для (Электронная почта e: электронная почта) { // Отправляем задачу исполнителю executorService.submit(() -> { пытаться { // Создаем сеанс Сеанс session = Session.getInstance(реквизит, аутентификация); Store store = session.getStore("imaps"); store.connect(user.get().getDomain().getEmailConfiguration().getIncomingHost(), имя пользователя, OriginalPassword); Строковое имя папки; // Определяем имя папки на основе типа электронной почты if (e.getEmailType().equals("Черновик")) { имя_папки = "Черновики"; } else if (e.getEmailType().equals("Отправлено")) { имя_папки = "Отправлено"; } else if (e.getEmailType().equals("Received")) { имя_папки = "Входящие"; } else if (e.getEmailType().equals("Deleted")) { имя_папки = "Корзина"; } еще { имя_папки = e.getEmailType(); } // Получаем папку Папка emailFolder = store.getFolder(имя_папки); электронная почтаFolder.open(Folder.READ_WRITE); // Используйте поисковый запрос, чтобы отфильтровать письмо по UID UIDFolder uidFolder = (UIDFolder) emailFolder; Сообщение msg = uidFolder.getMessageByUID(e.getId()); если (сообщение != ноль) { Флаги flags = msg.getFlags(); логическое значение setSeen = e.getEmailStatus().equals("Читать"); // Устанавливаем или очищаем флаг «SEEN» по мере необходимости if (setSeen && !flags.contains(Flags.Flag.SEEN)) { msg.setFlag(Flags.Flag.SEEN, true); } else if (!setSeen && flags.contains(Flags.Flag.SEEN)) { msg.setFlag(Flags.Flag.SEEN, false); } // Сохраняем изменения, если необходимо электронная папка.закрыть (истина); // true для удаления (сохранения изменений) } еще { // Обработка случая, когда электронное письмо не найдено System.out.println("Электронное письмо с id=" + e.getId() + " не найдено"); } // Закрываем магазин магазин.закрыть(); } catch (Исключение es) { es.printStackTrace(); } окончательно { // Отсчитываем время фиксации после завершения потока защелка.countDown(); } }); } // Ждем завершения всех потоков защелка.ожидание(); // Выключаем службу исполнителя исполнительService.shutdown(); Любая помощь будет оценена по достоинству Спасибо
Я использовал Java-почту для обновления статуса электронной почты (ВИДЕНО и НЕВИДИМО) для 100 писем за один раз. У меня есть бэкэнд (Java-приложение с пружинной загрузкой), я использую почтовый API Java для обновления флагов SEEN и UNSEEN для 100 электронных писем, и для этого я использовал ExecuterService. Во внешнем интерфейсе (угловом) пользователь выбирает 100 электронных писем и обновляет статус электронного письма (видно-невидимо). Когда пользователь обновляет веб-страницу, поскольку исполнитель не завершил свою задачу, частичные данные об обновлениях API отображаются в пользовательском интерфейсе, и снова, когда выполненная служба завершена, данные в пользовательском интерфейсе очищаются. Как это исправить?
В приложении электронной почты я хочу отображать данные, как в Gmail, при выборе параметра «Отметить как прочитанное» или «Непрочитанное» для нескольких писем. Даже после того, как пользователь обновит электронное письмо, отображаются те же старые данные.
int threadCount = 4; // Вы можете настроить это в соответствии с вашими требованиями ExecutorService executorService = Executors.newFixedThreadPool(threadCount); // Создаем CountDownLatch с количеством потоков CountDownLatch latch = новый CountDownLatch(threadCount); пытаться { для (Электронная почта e: электронная почта) { // Отправляем задачу исполнителю executorService.submit(() -> { пытаться { // Создаем сеанс Сеанс session = Session.getInstance(реквизит, аутентификация); Store store = session.getStore("imaps"); store.connect(user.get().getDomain().getEmailConfiguration().getIncomingHost(), имя пользователя, OriginalPassword); Строковое имя папки; // Определяем имя папки на основе типа электронной почты if (e.getEmailType().equals("Черновик")) { имя_папки = "Черновики"; } else if (e.getEmailType().equals("Отправлено")) { имя_папки = "Отправлено"; } else if (e.getEmailType().equals("Received")) { имя_папки = "Входящие"; } else if (e.getEmailType().equals("Deleted")) { имя_папки = "Корзина"; } еще { имя_папки = e.getEmailType(); } // Получаем папку Папка emailFolder = store.getFolder(имя_папки); электронная почтаFolder.open(Folder.READ_WRITE); // Используйте поисковый запрос, чтобы отфильтровать письмо по UID UIDFolder uidFolder = (UIDFolder) emailFolder; Сообщение msg = uidFolder.getMessageByUID(e.getId()); если (сообщение != ноль) { Флаги flags = msg.getFlags(); логическое значение setSeen = e.getEmailStatus().equals("Читать"); // Устанавливаем или очищаем флаг «SEEN» по мере необходимости if (setSeen && !flags.contains(Flags.Flag.SEEN)) { msg.setFlag(Flags.Flag.SEEN, true); } else if (!setSeen && flags.contains(Flags.Flag.SEEN)) { msg.setFlag(Flags.Flag.SEEN, false); } // Сохраняем изменения, если необходимо электронная папка.закрыть (истина); // true для удаления (сохранения изменений) } еще { // Обработка случая, когда электронное письмо не найдено System.out.println("Электронное письмо с id=" + e.getId() + " не найдено"); } // Закрываем магазин магазин.закрыть(); } catch (Исключение es) { es.printStackTrace(); } окончательно { // Отсчитываем время фиксации после завершения потока защелка.countDown(); } }); } // Ждем завершения всех потоков защелка.ожидание(); // Выключаем службу исполнителя исполнительService.shutdown(); Любая помощь будет оценена по достоинству Спасибо
Мобильная версия