Javamail 消息,在文件夹以只读模式打开时设置为可见?

标签 java jakarta-mail imap

我有一个以 READ_ONLY 打开的 IMAP Folder,我想将特定消息设置为 SEEN(已读)我的程序。

我试图找到一种方法将模式从 READ_ONLY 即时更改为 READ_WRITE 但显然唯一的方法是关闭 Folder 并再次打开它。

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

如果我从一开始就以 READ_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();
        }
}

有没有办法更巧妙地实现我想要的?

最佳答案

常规的解决办法是,以读写模式打开文件夹,然后使用peek当您想在不设置 seen 标志的情况下获取数据时的功能。查看的命令不会设置 seen 标志。

关于Javamail 消息,在文件夹以只读模式打开时设置为可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31241815/

相关文章:

java - 查找使用通配符属性注册的 OSGI 服务

java - 仅从 Exchange 获取新邮件,忽略 session 请求

node.js - 使用 node-imap 检索电子邮件

java - Greenmail SMTP服务器无法作为自定义Docker镜像正常工作

email - Java MimeMessage 到带有所有附件的 eml 文件

java - JavaMail addRecipient 方法的多个 header 问题

Perl:Gmail 的 Mail::IMAPClient 不阅读新邮件

java - 读取时客户端套接字出现问题

java - 如何在不使用 Collections.sort() 的情况下获得 Java 中的排序列表行为?

java - 使用 tcp 从 java 发送 double 到 C#