J'ai l'obligation de récupérer les messages non lus de Gmail. J'utilise l'API Java Mail. Par défaut, cette API récupère les mails du plus ancien au plus récent. Mais je dois d'abord récupérer les mails récents. C'est possible? Merci d'avance.
Voici un exemple. N'oubliez pas d'ajouter javax.mail dans votre 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() );
}
}
}
JavaMail vous donne un tableau d'objets Message. Les messages sont dans l'ordre de réception. Si vous souhaitez d'abord consulter les derniers messages reçus, parcourez le tableau dans l'ordre inverse. Si vous souhaitez commencer par examiner les messages les plus récents envoyés , vous devez trier le tableau, comme décrit dans l'autre réponse.
make sure you have to use imap protocal, it support for flaging.
do fallowing change at your code.
inbox.open( Folder.READ_ONLY ); need to change to inbox.open( Folder.READ_WRITE ); then after reading message need to set the flag like below message.setFlag(Flags.Flag.SEEN, true);
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);
}
}
}