Javamail appendMessages抛出IOException No Content

时间:2015-01-25 04:08:44

标签: java javamail

我试图将邮件从一个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等邮件客户端中打开失败的邮件正常工作,因此邮件不会被破坏。

UPDATE:

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

2 个答案:

答案 0 :(得分:4)

根据我们的离线讨论,将mail.imap.partialfetch属性设置为false会使其生效。当发生这种情况时,几乎总是因为服务器在某种程度上被破坏了。

另见:

Javamail Notes在“已知限制,错误,问题列表”第4和第5部分下。

Javamail FAQ, Fetch

答案 1 :(得分:0)

该错误已在 Java Mail 1.6

中修复
  

https://javaee.github.io/javamail/