我试图将邮件从一个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!
P.S。我使用的是Java 1.7u71和Javamail 1.5.2
答案 0 :(得分:4)
根据我们的离线讨论,将mail.imap.partialfetch
属性设置为false
会使其生效。当发生这种情况时,几乎总是因为服务器在某种程度上被破坏了。
另见:
Javamail Notes在“已知限制,错误,问题列表”第4和第5部分下。
答案 1 :(得分:0)
该错误已在 Java Mail 1.6
中修复