moving an ImapFolder to another Folder

Viewed 37

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?

0 Answers
Related