JavaMail reading recent unread mails using IMAP

前端 未结 4 1320
挽巷
挽巷 2020-12-10 02:46

I have a requirement to retrieve unread mails from Gmail. I am using Java Mail API. By default, this API retrieves mails from the oldest to newest. But I need to retrieve re

4条回答
  •  [愿得一人]
    2020-12-10 03:35

    Make sure to use the IMAP protocol, as it supports for flagging.

    Do following changes to your code:

    1. replace inbox.open( Folder.READ_ONLY ); by inbox.open( Folder.READ_WRITE );
    2. Then after reading the message, set the flag like so:

      message.setFlag(Flags.Flag.SEEN, true);
      

    Full example:

        import javax.mail.*;
        import javax.mail.search.FlagTerm;
        import java.util.*;
    
        public class GmailFetch {
    
          public static void main( String[] args ) throws Exception {
    
            Session session = Session.getDefaultInstance(new Properties( ));
            Store store = session.getStore("imaps");
            store.connect("imap.googlemail.com", 993, "username@gmail.com", "password");
            Folder inbox = store.getFolder( "INBOX" );
            inbox.open( Folder.READ_WRITE );
    
            // Fetch unseen messages from inbox folder
            Message[] messages = inbox.search(
                new FlagTerm(new Flags(Flags.Flag.SEEN), false));
    
            // Sort messages from recent to oldest
            Arrays.sort( messages, ( m1, m2 ) -> {
              try {
                return m2.getSentDate().compareTo( m1.getSentDate() );
              } catch ( MessagingException e ) {
                throw new RuntimeException( e );
              }
            } );
    
            for ( Message message : messages ) {
              System.out.println( 
                  "sendDate: " + message.getSentDate()
                  + " subject:" + message.getSubject() );
                  message.setFlag(Flags.Flag.SEEN, true);
            }
          }
        }
    

提交回复
热议问题