Suraj Prasad
Suraj Prasad

Reputation: 251

Retrieving emails from Latest to oldest Java Mail API

public class testemail {

Properties properties = null;
private Session session = null;
private Store store = null;
private Folder inbox = null;
private String userName = "[email protected]";  //
private String password = "xxx";
public testemail() {

}

public void readMails() throws Exception {
    properties = new Properties();
    properties.setProperty("mail.host", "imap.gmail.com");
    properties.setProperty("mail.port", "995");
    properties.setProperty("mail.transport.protocol", "imaps");
    session = Session.getInstance(properties,
            new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(userName, password);
        }
    });
    try {
        store = session.getStore("imaps");
        store.connect();
        inbox = store.getFolder("INBOX");
        inbox.open(Folder.READ_ONLY);
        Message messages[] = inbox.search(new FlagTerm(
                new Flags(Flag.SEEN), false));

        System.out.println("Number of mails = " + messages.length);

        for ( Message message : messages ) {

            Address[] from = message.getFrom();
            System.out.println("-------------------------------");
            System.out.println("Date : " + message.getSentDate());
            System.out.println("From : " + from[0]);
            System.out.println("Subject: " + message.getSubject());
            System.out.println("Content :");

            Object content = message.getContent();
            Multipart multiPart = (Multipart) content;
            procesMultiPart(multiPart);

            System.out.println("--------------------------------");

        }
        inbox.close(true);
        store.close();
    } 
    catch (NoSuchProviderException e)
    {
        e.printStackTrace();
    } catch (MessagingException e) {
        e.printStackTrace();
    }
}


public void procesMultiPart(Multipart content) throws Exception {

    int multiPartCount = content.getCount();
    for (int i = 0; i < multiPartCount; i++) {
        BodyPart bodyPart = content.getBodyPart(i);
        Object o;
        o = bodyPart.getContent();
        if (o instanceof String) {
            System.out.println(o);
        } else if (o instanceof Multipart) {
            procesMultiPart((Multipart) o);
        }
    }
} 

public static void main(String[] args) throws Exception {
    testemail sample = new testemail();
    sample.readMails();
}}

In the above code I am able to get emails from oldest to newest on my console from gmail. However I would want it to loop from newest to oldest. Is there any way I could get this achieved. Please Help :)

Upvotes: 2

Views: 4965

Answers (1)

Glorfindel
Glorfindel

Reputation: 22641

I don't think there's a parameter or method for this in the JavaMail API. You have to reverse the messages array yourself, e.g. by including the Commons.Lang library:

messages = ArrayUtils.reverse(messages);

or iterating over it in the other direction:

for (int i = messages.length - 1; i >= 0; i--) {
    Message message = messages[i];

Upvotes: 3

Related Questions