2013-10-09 27 views
3

我想我錯過了關於如何在JavaMail中進行搜索的內容。從文件夾 在JavaMail中搜索 - 如何使它發生服務器端?

    1. 下載空消息創建你的結果
    2. 過濾器(yourFolder.search)使用搜索詞的結果相匹配的新搜索關鍵詞。

    This works。但是 - 爲什麼這樣呢?如果我使用javamail連接到gmail之類的東西,那麼搜索並沒有在服務器端執行,而且似乎沒有任何優勢來使用整個javax.mail.search.SearchTerm結構。效率或減少需要通過網絡發送的數據量...

    我沒有看到任何在服務器端執行搜索並返回匹配列表的方式。有任何想法嗎?

    編輯:包括我現在正在做的,它不會執行任何搜索服務器端的僞代碼。即使我將其轉換爲使用SearchTerm它仍然不會做任何服務器端,對吧?

    Properties props = System.getProperties(); 
    props.setProperty("mail.store.protocol", "gimaps"); 
    final Session session = Session.getDefaultInstance(props, null); 
    final GmailSSLStore store = (GmailSSLStore) session.getStore("gimaps"); 
    store.connect(ADDRESS, PASSWORD); 
    final GmailFolder allMailFolder = (GmailFolder) store.getFolder("[Gmail]/All Mail"); 
    allMailFolder.open(Folder.READ_ONLY); 
    final Message[] allMessages = allMailFolder.getMessages(); 
    System.out.println("Messages:" + allMessages.length); 
    
    FetchProfile fp = new FetchProfile(); 
    fp.add(FetchProfile.Item.ENVELOPE); 
    allMailFolder.fetch(allMessages, fp); 
    
    for (final Message message : allMessages) { 
        final Address[] addrs = message.getFrom(); 
        if (addrs != null) { 
        for (final Address addr : addrs) { 
         if (addr.toString().toLowerCase().contains("george")) { 
         System.out.println(addr.toString()); 
         } 
        } 
        } 
    } 
    
  • 回答

    0

    你做錯了什麼,但是你沒有提供足夠的細節來說明你在做什麼來讓我們知道你做錯了什麼。

    您使用的是IMAP嗎?

    向我們展示一些代碼和調試輸出。

    0

    如果您使用預定義的SearchTerm實現在IMAP文件夾中進行搜索,它將嘗試在服務器上執行搜索。看看SearchSequence.generateSequence的執行情況。在你的例子中,你可能想要使用FromStringTerm

    如果您使用的是gimap提供程序,還可以使用Google的IMAP擴展程序,其中包括X-GM-RAW搜索屬性,使您可以在Gmail網絡界面中完全搜索。 java的實現在GmailRawSearchTerm中只有工作在服務器端。

    相關問題