1

有没有人有经验Javamail javax.mail.FolderClosedException

我的问题是:我想阅读一些邮件,一切正常。但是我已经将我的阅读器类更改为一个更具技术性的类,它只获取Message对象。

第二步我想做豆子。获取主题等信息非常容易:

public void getMail(Message msg) {
   subject = msg.getSubject();
   ...
}

这里的主要问题:msg.getContent需要一个打开的文件夹...但是我的技术阅读器类获取所有消息对象,关闭文件夹...之后我的业务方法getMail执行msg.getContent

是否可以通过业务类和技术类以这种方式做到这一点,还是我必须在技术类中设置邮件 bean 并返回它们的列表?!

4

2 回答 2

3

您的问题似乎是getContent()将从服务器加载内容,因为 JavaMail 实现通常首先开始下载请求的信息,当您真正需要它时,例​​如通过调用getContent().

在将内容交给您的业务代码之前,您可以强制下载所有内容。因此,您可以创建它们的副本,而不是直接移交您从技术课程中获得的消息对象。这会强制 JavaMail 类使用例如 IMAP 连接来完全下载您的邮件:

/* assuming you retrieved 'message' from your folder object */
Message copyOfMessage = new MimeMessage( (MimeMessage) message );
[..]
folder.close();
[..]
yourBusinessObject.getMail( copyOfMessage );

但我不得不承认,我在关闭文件夹后从未尝试访问复制的对象。并且也从未将其与 POP3 一起使用。但我会试一试。

于 2012-01-12T15:53:10.817 回答
1

只传递你需要的东西而不是Message实例怎么样?喜欢

public void getMail(String subject, Object content, ...) {
   ...
}

当然它不像以前那么干净,但可能会成功;)

PS: Für d'IPA, oder hesch die dure?

于 2011-03-22T12:58:24.950 回答