我正在尝试使用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?
谷歌搜索的时间一无所获。
答案 0 :(得分:3)
您可以让服务器使用适当的IMAP命令搜索您。 SEARCH命令只会让你到目前为止,你可能需要的是SORT命令。 SORT没有在JavaMail中实现,但documentation显示了如何自己实现它:
(我无法弄清楚如何链接到带括号的网址)
答案 1 :(得分:0)
连接到Exchange IMAP商店并使用javax.mail.search.SearchTerm