2012-04-21 88 views
0

使用mstor瓦特/ Windows中,我能夠連接到MBOX店(感謝SO)。我似乎可以閱讀消息指針;我知道這一點,因爲每當我遍歷商店時,它都會迭代正確的消息數量。問題是沒有標題和內容正在加載!任何想法?mstor閱讀MBOX文件,但返回null

是的,我在classpath中(它有mstor的lib這些天)的JavaMail的東西。我甚至在mstor的示例文件(imagined.mbox)中使用它。

在此先感謝。

我的代碼:

public static void main(String[] args) throws Exception { 

    Properties props = new Properties(); 
    props.setProperty("mstor.mbox.metadataStrategy", "xml"); 
    Session session1 = Session.getDefaultInstance(props); 

    Session session = Session.getDefaultInstance(new Properties()); 

    Store store = session.getStore(new URLName("mstor:C:/tmp/imagined.mbox")); 
    store.connect(); 

    System.out.println(store.isConnected()); 

    Folder inbox = store.getDefaultFolder(); // no subfolder here; even if there is an Inbox, I get the same thing... 
    inbox.open(Folder.READ_ONLY); 

    Message[] messages = inbox.getMessages(); 
    for (Message m : messages) { 
    System.out.println(m.getSubject()); 
    } 

}

我的典型結果:

true (i.e., yes, I'm connected...) 
null 
null 
null 
null 

回答

0

我看到這是一個滿月,但我只是碰到了同樣的問題。嘗試添加m.saveChanges()作爲for循環的第一行。這迫使mstor創建消息標題的緩存。

按道理上面你的代碼是正確的。奇怪的是,我們不得不添加這條線,但這是解決我們問題的功能。

如果你已經找到另一種解決方案,請不要忘了分享。只是因爲沒有人有答案並不意味着沒有人有同樣的問題!

+0

爲什麼這樣做/爲什麼需要它?我從一些Clojure代碼中使用了它,它也解決了我的問題... – 2014-11-27 16:37:19

+0

因爲我工作了很長時間...我認爲它是API中的一個錯誤,它從緩存中讀取消息在緩存之前的某種。如果它適合你,請提出答案。 – 2015-04-17 12:47:21

+0

看到我上面的答案,這幾乎是你說的。最終禁用緩存完成了任務。 – 2015-04-27 14:37:03

0

創造Properties稱爲properties實例後,使用以下方法來禁用緩存:

properties.setProperty("mstor.mbox.metadataStrategy", "none"); 

如果你這樣做,然後再試一次,你會發現你能呼喚主體的存取方法,從,等,而不必訴諸於m.saveChanges()黑客。