In my little e-mail client I try to implement a feature to move an ImapFolder to another ImapFolder so that the first one is the secound one's subfolder.
Because I was not able to find any method which realizes that, I tried to implement the feature on my own like this:
public static boolean moveFolder(Folder move, Folder parent) {
Folder newFolder = FolderUtils.createFolder(parent, move.getName());
if(move == null || newFolder == null)
return false;
if(!(move instanceof IMAPFolder))
return false;
if(FolderUtils.openFolder(move))
try {
((IMAPFolder) move).moveMessages(move.getMessages(), newFolder);
FolderUtils.deleteFolder(move);
return true;
} catch (MessagingException e) {
e.printStackTrace();
}
return false;
}
public static boolean openFolder(Folder folder) {
if(folder == null)
return true;
if(!folder.getStore().isConnected())
return false;
if(!folder.isOpen()) {
try {
if(folder.getType() == Folder.HOLDS_FOLDERS)
return false;
} catch (MessagingException e1) {
}
try {
folder.open(Folder.READ_WRITE);
return true;
} catch (MessagingException e) {
return false;
}
}else
return true;
}
public static boolean deleteFolder(Folder folder) {
try {
if(folder != null){
if(folder.isOpen())
folder.close();
folder.delete(true);
return true;
}
} catch (Exception e) {
}
return false;
}
public static Folder createFolder(Folder parent, String name) {
try {
if(parent != null) {
Folder nF = parent.getFolder(name);
if(!nF.exists()) {
boolean result = nF.create(Folder.HOLDS_FOLDERS + Folder.HOLDS_MESSAGES);
if(result) {
nF.setSubscribed(true);
return nF;
}
}
}
} catch (MessagingException e) {
e.printStackTrace();
}
return null;
}
My problem is that I allways get the following exception when I try to create a new Folder in a subfolder of my inbox:
javax.mail.MessagingException: Unsupported type;
nested exception is:
com.sun.mail.iap.ProtocolException: Unsupported type
at com.sun.mail.imap.IMAPFolder.doCommandIgnoreFailure(IMAPFolder.java:3898)
at com.sun.mail.imap.IMAPFolder.create(IMAPFolder.java:810)
at de.cpu.outlook.utils.FolderUtils.createFolder(FolderUtils.java:33)
at de.cpu.outlook.utils.FolderUtils.moveFolder(FolderUtils.java:63)
at de.cpu.outlook.gui.toolbars.utils.MoveFolderScreen$1$1.run(MoveFolderScreen.java:90)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: com.sun.mail.iap.ProtocolException: Unsupported type
at com.sun.mail.imap.IMAPFolder$6.doCommand(IMAPFolder.java:831)
at com.sun.mail.imap.IMAPFolder.doProtocolCommand(IMAPFolder.java:3921)
at com.sun.mail.imap.IMAPFolder.doCommandIgnoreFailure(IMAPFolder.java:3891)
... 5 more
Is there any way to fix this problem?