我正在尝试将邮件从一个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/

10-10 22:19