Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javamail appendMessages引发IOException无内容_Java_Jakarta Mail - Fatal编程技术网

Javamail appendMessages引发IOException无内容

Javamail appendMessages引发IOException无内容,java,jakarta-mail,Java,Jakarta Mail,我正在尝试将邮件从一个IMAP存储复制到另一个IMAP存储 执行实际复制的代码行为: folder.appendMessages(new Message[] { m }); 大多数邮件复制都没有问题,但有些邮件复制失败: javax.mail.MessagingException: IOException while appending messages; nested exception is: java.io.IOException: No content 堆栈跟踪指向 在我

我正在尝试将邮件从一个IMAP存储复制到另一个IMAP存储

执行实际复制的代码行为:

folder.appendMessages(new Message[] { m });
大多数邮件复制都没有问题,但有些邮件复制失败:

javax.mail.MessagingException: IOException while appending messages;
  nested exception is:
    java.io.IOException: No content
堆栈跟踪指向

在我的测试用例中,成功复制的一些消息大到6MB,而失败的一些消息小到16KB,所以这不是大小问题

我不确定,但失败的消息可能有附件。在失败的消息组和成功的消息组中都找到了内容类型
multipart/ALTERNATIVE

在邮件客户端(如Thunderbird)中打开失败的邮件可以正常工作,因此邮件不会损坏

更新:
mail.imap.fetchsize
与此问题有关。当默认值为16384B时,在1000条消息的样本上运行时,最小的失败消息为16432B,略大于fetchsize

当我将其增加到65536b时——同一样本中最小的失败消息是65787b——再次稍微超过了fetchsize

大小为16432B的消息在默认fetchsize下始终失败,但在较高的fetchsize下复制成功,因此这肯定是一个问题


知道是什么导致了这个问题吗

有此问题时如何复制邮件

蒂亚


p、 根据我们的离线讨论,我正在使用Java1.7u71和Javamail 1.5.2,将
mail.imap.partialfetch
属性设置为
false
会使它工作。当这种情况发生时,几乎总是因为服务器以某种方式损坏

另见:

在“已知限制、缺陷和问题列表”第4节和第5节下


该错误已在Java Mail 1.6中修复


这将有助于保持健康。这可能是其中一个邮件服务器中的错误。您使用的是什么邮件服务器?在将邮件附加到其他存储/文件夹之前,您是否对邮件做了任何处理?@BillShannon-感谢您及时关注此问题。我已将失败消息的调试输出粘贴到--此消息在Thunderbird中正确打开时始终失败。为了回答您的其他问题,服务器为modusMail IMAP4S 4.5.654.0(根据调试输出),我不会对消息执行任何操作。我只需在
源服务器
上迭代消息,对于每条消息,我确保它不存在于
目标服务器
a-la
getMessageId()
,如果它不存在,我调用
appendMessages()
如上问题所述。@BillShannon-
mail.imap.fetchsize
在这里起作用。请参阅上面问题中的更新。我们可能需要将此调试脱机。请通过javamail与我联系_ww@oracle.com. 我在调试输出中没有看到任何明显的错误。在附加消息之前,是否可以添加m.writeTo(newfileoutputstream(“msg.txt”);看看这是否也会产生“无内容”例外?谢谢比尔的大力帮助!我编辑了你的答案以包含参考链接。