2012-04-21 89 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()黑客。