フォルダーが存在しない場合は作成し、別のフォルダーから宛先フォルダーにメッセージをコピーしようとしています。理解できない奇妙な動作を見つけています。次の抜粋を考えると:
// 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.");
}
}
}
次の動作が検査されます。
- フォルダが存在しない場合:
- フォルダが作成されます
- で例外がスローされ
source.copyMessages
ます。
- フォルダが存在する場合:
- メッセージは期待どおりにコピーされます。
- メッセージは削除対象としてマークされます。
私は JavaMail 1.4.6 を使用していますが、1.6.5 でも試しました。