Javamail邮件,设置为在文件夹以只读模式打开时显示?

Javamail邮件,设置为在文件夹以只读模式打开时显示?,java,jakarta-mail,imap,Java,Jakarta Mail,Imap,我有一个IMAP文件夹以只读方式打开,我想在我的程序中的特定点将特定消息设置为查看 我试图找到一种方法将模式从READ\u ONLY动态更改为READ\u WRITE,但显然唯一的方法是关闭文件夹,然后再次打开它 我写了一个强大的方法,实现了上述目标,但我真的很不满意这种情况 如果我从一开始就以READ\u WRITE的方式打开文件夹,则在处理过程中,邮件会被标记为READ,这不是我希望邮件被标记为READ的时间点 这里有一个偷看的方法,我写的,不要傻笑 /** * @param messag

我有一个IMAP
文件夹
以只读方式打开,我想在我的程序中的特定点将特定消息设置为查看

我试图找到一种方法将模式从
READ\u ONLY
动态更改为
READ\u WRITE
,但显然唯一的方法是关闭
文件夹
,然后再次打开它

我写了一个强大的方法,实现了上述目标,但我真的很不满意这种情况

如果我从一开始就以
READ\u WRITE
的方式打开文件夹,则在处理过程中,邮件会被标记为
READ
,这不是我希望邮件被标记为
READ
的时间点

这里有一个偷看的方法,我写的,不要傻笑

/**
 * @param message The message to be processed.
 * @param read True to mark as READ, False to mark as UNREAD.
 */
public static void markMessageAsRead(Message message, boolean read) {
        try {
            //Getting required variables
            Folder messageFolder = message.getFolder();
            int initialFolderMode = messageFolder.getMode();
            boolean initialFolderOpenState = messageFolder.isOpen();

            //If the folder is readonly then lets set it to readwrite
            if(initialFolderMode == Folder.READ_ONLY) {
                if(initialFolderOpenState) {
                    messageFolder.close(false);
                }

                messageFolder.open(Folder.READ_WRITE);
            }

            //Make sure folder is open (incase the above if didn't evaluate)
            if(!initialFolderOpenState) {
                messageFolder.open(Folder.READ_WRITE);
            }

            //Marking message as seen/unseen
            message.setFlag(Flags.Flag.SEEN, read);

            //Now lets revert the folder to it's state before it came here
            if(initialFolderOpenState) {
                if(!messageFolder.isOpen()) {
                    messageFolder.open(initialFolderMode);
                }
            } else {
                if(messageFolder.isOpen()) {
                    messageFolder.close(false);
                }
            }
        } catch (MessagingException e) {
            e.printStackTrace();
        }
}

有没有一种方法可以更灵活地实现我想要的功能?

传统的解决方案是以读写模式打开文件夹,然后在不设置
seen
标志的情况下提取数据时使用该功能。peek命令不设置
seen
标志