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 recent mails first. Is it possible? Thanks in advance.
IMAP: Acronym for Internet Message Access Protocol. It is an advanced protocol for receiving messages. It provides support for multiple mailbox for each user, in addition to, mailbox can be shared by multiple users. It is defined in RFC 2060.
addRecipient(Message.RecipientType.CC, "[email protected],[email protected],[email protected]"); Or message. addRecipient(Message.RecipientType.CC, "[email protected];[email protected];[email protected]"); I can send a message using alternate methods too, but I want to know the purpose of the above method.
Here is example. Do not forget to add javax.mail in your classpath.
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, "[email protected]", "password"); Folder inbox = store.getFolder( "INBOX" ); inbox.open( Folder.READ_ONLY ); // 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() ); } } }
Make sure to use the IMAP protocol, as it supports for flagging.
Do following changes to your code:
inbox.open( Folder.READ_ONLY );
by inbox.open( Folder.READ_WRITE );
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, "[email protected]", "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); } } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With