我正在尝试将邮件从一个IMAP存储复制到另一个。
进行实际复制的代码行是:
folder.appendMessages(new Message[] { m });
大多数邮件都可以毫无问题地复制,但是有些失败:
javax.mail.MessagingException: IOException while appending messages;
nested exception is:
java.io.IOException: No content
stacktrace指向IMAPFolder.java:1767
在我的测试案例中,成功复制的某些消息最大为6MB,而失败的一些消息最小为16KB,因此这不是大小问题。
我不确定,但是失败的邮件可能带有附件。在失败的消息组和成功的消息组中都找到了内容类型
multipart/ALTERNATIVE
。在类似Thunderbird的邮件客户端中打开失败的消息可以正常工作,因此消息不会损坏。
更新:
mail.imap.fetchsize
在此问题中起作用。当它的默认值为16,384b时,运行1000个消息的样本时,最小的失败消息为16,432b-略大于fetchsize。当我将其增加到65,536b时-该样本的最小失败消息是65,787b-再次略微超过了fetchsize。
大小为16,432b的消息在使用默认fetchsize时始终失败,并使用较高的fetchsize成功复制,因此这绝对是一个问题。
知道导致此问题的原因是什么?
遇到此问题,如何复制邮件?
TIA!
ps。我正在使用Java 1.7u71和Javamail 1.5.2
最佳答案
根据我们的离线讨论,将mail.imap.partialfetch
属性设置为false
使其起作用。发生这种情况时,几乎总是因为服务器以某种方式损坏了。
也可以看看:
Javamail Notes在“已知限制,错误,问题列表”第4和5部分下。
Javamail FAQ, Fetch
关于java - Javamail appendMessages抛出IOException没有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28133124/