我可以在Java中对邮件服务器执行搜索吗?

我正在尝试使用Java搜索我的Gmail。 使用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邮箱的存储问题,而且速度也很慢(我只能想象搜索千兆字节的文本需要多长时间……)。

所以我的问题是,有没有办法在服务器上搜索邮件,这是一个la gmail的搜索字段? 也许通过Microsoft Exchange?

谷歌搜索的时间一无所获。

您可以使用适当的IMAP命令让服务器为您搜索。 SEARCH命令只会让你到目前为止,你可能需要的是SORT命令。 SORT没有在JavaMail中实现,但文档显示了如何自己实现它:

http://java.sun.com/products/javamail/javadocs/com/sun/mail/imap/IMAPFolder.html#doCommand(com.sun.mail.imap.IMAPFolder.ProtocolCommand)

(我无法弄清楚如何用圆括号链接到一个URL)

连接到Exchange IMAP存储并使用javax.mail.search.SearchTerm