gpt4 book ai didi

java - 为什么成功创建文件夹后出现FolderNotFoundException?

转载 作者:行者123 更新时间:2023-12-01 14:51:24 25 4
gpt4 key购买 nike

我正在尝试创建一个文件夹(如果它不存在),然后将邮件从另一个文件夹复制到目标文件夹。我发现一些我无法理解的奇怪行为。给出以下摘录:

// messages is an array of Message instances.
// Source is the source folder
// destination is a string of the destination folder.
Folder dest = null;
try {
dest = store.getFolder(destination);
if (!dest.exists()) {
dest.create(Folder.HOLDS_MESSAGES | Folder.HOLDS_FOLDERS);
// Since folder's are not meant to cache I thought I'd get it again
// though this does not work either.
//dest.close(false);
//dest = store.getFolder(destination);
}
dest.open(Folder.READ_WRITE);
// Fails here
source.copyMessages(messages, dest);
source.setFlags(messages, new Flags(Flags.Flag.DELETED), true);
} catch (MessagingException ex) {
throw new MailProcessorException(ex.getMessage(), ex);
} finally {
if (dest != null) {
try {
dest.close(false);
} catch (MessagingException ex) {
System.err.println("Couldn't close destination folder.");
}
}
}

检查以下行为:

  • 如果该文件夹不存在:
    1. 文件夹已创建
    2. source.copyMessages 引发异常。
  • 如果该文件夹确实存在:
    1. 消息已按预期复制。
    2. 消息被标记为删除。

我正在使用 JavaMail 1.4.6,也尝试过 1.6.5。

最佳答案

真的很奇怪。查看您的代码并阅读文档,应该不会发生这种情况......

邮件服务器有问题吗?某些数据库使用一致性模型(例如,请参阅 http://en.wikipedia.org/wiki/Eventual_consistency),但这些模型并不总是按照您天真的期望的方式运行。您是否有机会在不同的邮件服务器上尝试您的代码?或者,尝试在 copyMessages(...) 调用之前放置一个很长的时间(30 秒?)Thread.sleep(...) ,看看是否可以解决问题.

如果是这样,则说明您的服务器在一个请求中创建了该文件夹,但此创建需要一段时间才能到达处理消息复制的服务器代码部分。然后,不幸的是,我不确定如果复制失败或人为延迟(这很糟糕),除了重试之外,您是否还能做很多事情。

旁白:文档似乎说,如果您愿意,您可以跳过 dest.open(Folder.READ_WRITE);

关于java - 为什么成功创建文件夹后出现FolderNotFoundException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14805119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com