javamail mark gmail message as read

前端 未结 9 515
陌清茗
陌清茗 2021-01-31 03:13

Note: added after answer: Thanks.. Yeah I had tried the Flag.SEEN to true and saveChanges.. I also had read getContent marks it read. I tried using it in the for statement that

相关标签:
9条回答
  • 2021-01-31 03:49

    You can also try

    head over to the gmail settings > Forwarding and POP/IMAP

    from the dropdown of When messages are accessed with POP select mark Gmail's copy as read and save the changes

    0 讨论(0)
  • 2021-01-31 03:50

    One liner that will do it WITHOUT downloading the entire message:

    single message:

    folder.setFlags(new Message[] {message}, new Flags(Flags.Flag.SEEN), true);
    

    all messages:

    folder.setFlags(messages, new Flags(Flags.Flag.SEEN), true);
    

    Other methods of calling getContent() or creating a copy with new MimeMessage(original) cause the client to download the entire message, and creates a huge performance hit.

    Note that the inbox must be opened for READ_WRITE:

    folder.open(Folder.READ_WRITE);
    
    0 讨论(0)
  • 2021-01-31 03:54

    Well this post is old but the easiest solution hasn´t been posted yet.

    You are accessing the Message. message.setFlag(Flag.SEEN, true);

    0 讨论(0)
  • for (Message message : messages) {
                        message.setFlag(Flags.Flag.SEEN,true);
                    }
    

    and change the below line

    folder.open(Folder.READ_ONLY);

    to this

    folder.open(Folder.READ_WRITE);

    0 讨论(0)
  • 2021-01-31 03:57

    You may also consider having a public static int max_message_number, and storing in it the message[i].getMessageNumber(); as soon as you read a message. Then before reading any message just check if the max_message_number < message[i].getmessageNumber(). If true then don't print this message (as it has been already read)

    0 讨论(0)
  • 2021-01-31 03:57

    If you are using a for loop to read or check a mail one by one, the code can be as follows to mark a gmail message as read:

        Message[] unreadMessages = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false));
                for (int q = 0; q < unreadMessages.length; q++) {
    
                  unreadMessages[q].setFlag(Flag.SEEN, true);
    
                }
    

    What this code does is that it makes it unread one by one.

    And also folder/inbox needs to be READ_WRITE, instead of READ_ONLY:

    folder.open(Folder.READ_WRITE);
    
    0 讨论(0)
提交回复
热议问题