Могу ли я выполнить поиск на почтовом сервере в Java?

Я пытаюсь выполнить поиск в моем 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?

Часов Гугля ничего не получилось.

2 ответа

Вы можете разрешить серверу выполнять поиск за вас с помощью соответствующей команды IMAP. Команда SEARCH покажет вам только то, что вам, вероятно, понадобится команда SORT. SORT не реализован в JavaMail, но документация показывает, как вы можете реализовать его самостоятельно:

http://java.sun.com/products/javamail/javadocs/com/sun/mail/imap/IMAPFolder.html

(Я не мог понять, как сделать ссылку на URL в скобках)

Подключитесь к хранилищу Exchange IMAP и используйте javax.mail.search.SearchTerm

Другие вопросы по тегам