Я пытаюсь выполнить поиск своего Gmail с помощью Java. С JavaMail я могу сделать сообщение поиском сообщения как так:
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "myUsername", "myPassword");
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
SearchTerm term = new SearchTerm() {
@Override
public boolean match(Message mess) {
try {
return mess.getContent().toString().toLowerCase().indexOf("boston") != -1;
} catch (IOException ex) {
Logger.getLogger(JavaMailTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (MessagingException ex) {
Logger.getLogger(JavaMailTest.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
};
Message[] searchResults = inbox.search(term);
for(Message m:searchResults)
System.out.println("MATCHED: " + m.getFrom()[0]);
Но это требует загрузки каждого сообщения. Конечно, я могу кэшировать все результаты, но это становится беспокойством устройства хранения данных с большими полями Gmail и также было бы очень медленно (я могу только вообразить, сколько времени оно взяло бы для поиска гигабайтов текста...).
Таким образом, мой вопрос, существует ли способ перерыть почту на сервере, а-ля поле поиска Gmail? Возможно, через Microsoft Exchange?
Часы поиска с помощью Google ничего не подняли.
Подключитесь к хранилищу IMAP Exchange и используйте javax.mail.search.SearchTerm
Вы можете позволить серверу выполнять поиск за вас с помощью соответствующей команды IMAP. Команда SEARCH поможет вам только до тех пор, пока вам не понадобится команда SORT. СОРТ не реализован в JavaMail, но в документации показано, как вы можете реализовать его самостоятельно:
(Я не мог понять, как связать URL-адрес в круглых скобках)