У меня есть многопоточное приложение, в котором несколько почтовых ящиков IMAP считываются одновременно. Каждый поток открывает настроенную папку, например, INBOX, читает все непрочитанные письма, а затем закрывает / удаляет папку.
private void readMail(ImapMailbox mailbox) throws Exception {
Properties props = new Properties();
props.put("mail.debug", mailbox.isDebug());
props.put("mail.imap.connectiontimeout", connectionTimeout);
props.put("mail.imap.timeout", timeout);
Session session = Session.getDefaultInstance(props);
Store store = session.getStore(new URLName(imapUrl(mailbox)));
Folder folder = null;
try {
store.connect();
folder = store.getFolder(mailbox.getFolder());
folder.open(Folder.READ_WRITE);
for (Message message : folder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false))) {
if (message == null) {
logger.warn("Mail message is null for mailbox {}!!", mailbox.getEmail());
continue;
}
try {
sender.sendEmailToQueue(mailbox, message);
message.setFlag(Flags.Flag.DELETED, true);
} catch (Throwable ex) {
logger.error("Failed to add email to queue", ex);
}
}
} finally {
if (folder != null && folder.isOpen()) {
try {
folder.close(true);
} catch (Exception ex) {
logger.warn("Problem closing folder {}", folder.getFullName(), ex);
}
}
if (store != null && store.isConnected()) {
try {
store.close();
} catch (Exception ex) {
logger.warn("Problem closing store", ex);
}
}
}
}
Если один почтовый ящик настроен для чтения из INBOX, а другой - для чтения из подпапки INBOX, например INBOX / customFolder и родительская папка закрыта. Это также закрывает подпапку?
Также кто-нибудь может объяснить, почему я получаю нулевые сообщения в l oop? Иногда я вижу это напечатанным в журналах: logger.warn («Почтовое сообщение для почтового ящика пустое {} !!», mailbox.getEmail ());