2010-03-09 44 views
7

我正在嘗試使用Java執行我的gmail搜索。用JavaMail我可以通過郵件搜索,像這樣做一則消息:我可以使用Java在郵件服務器上執行搜索嗎?

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?

Google的營業時間沒有任何變化。

回答

0

連接到Exchange IMAP存儲和使用javax.mail.search.SearchTerm

3

您可以讓服務器爲你做的搜索,用適當的IMAP命令。 SEARCH命令只會幫你達到目的,你可能需要的是SORT命令。排序是沒有的JavaMail實現,但在documentation展示瞭如何實現它自己:

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

(我無法弄清楚如何使用括號鏈接到一個URL)

+0

感謝。我可以連接到服務器和IMAPFolder,但是當我發出doCommand(按照鏈接中的示例)時,response.isOK()爲false。我得到了一個異常的第一時間(我似乎無法重現),但現在它只是返回: A5 BAD未知命令:SORT 我的連接代碼: IMAPStore店=新IMAPStore(會話,新的URLName(「imap:// myusername:[email protected]/」)); store.connect(); IMAPFolder folder =(IMAPFolder)store.getFolder(「inbox」); 然後我做同樣的folder.doCommand()調用爲例。任何想法爲什麼這不起作用? 抱歉格式化。 – smurthas 2010-03-09 03:39:36

+0

'不明命令:SORT'意味着服務器不支持'SORT'命令。當您發出CAPABILITY命令(應該是JavaMail發送的第一個東西)時,IMAP服務器會告訴您支持哪些功能,以便您可以檢查該響應以查看可用功能。 – Martin 2010-03-09 04:11:46

相關問題