Java Mail API电子邮件未按相反顺序显示

时间:2015-08-16 16:19:10

标签: java javamail

public class testemail {

    Properties properties = null;
    private Session session = null;
    private Store store = null;
    private Folder inbox = null;
    private String userName = "xx@gmail.com";  //
    private String password = "xx";
    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));
                    Message messages[]=inbox.getMessages();
            //      System.out.println("Number of mails = " + messages.length);

                    ArrayUtils.reverse(messages);
                    for ( Message message : messages ) {
                            System.out.println("Subject: "+ message.getSubject());
                            //if(message.getSubject().toString()=="Suppliers that match your search: suto in future mode")
                            //{
                            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("--------------------------------");
                            //}
                            //else
                            //{
                                    //System.out.println("not found");
                            //}
                    }
                    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();
    }}

输出:

  

主题:使用Gmail的收件箱保持更有条理

     

日期:8月14日星期五19:46:39 IST 2015

     

主题:登录尝试被阻止

     

日期:8月14日星期五21:53:49 IST 2015

     

主题:与您的搜索匹配的供应商:Jan 28 US by vani

     

日期:8月15日星期六11:55:33 IST 2015

     

主题:符合您搜索条件的供应商:Search1

     

日期:8月15日星期六11:55:35 IST 2015

     

主题:符合您搜索条件的供应商:123

     

日期:8月15日星期六11:55:29 IST 2015

     

主题:符合您搜索条件的供应商:

     

日期:8月15日星期六11:55:32 IST 2015

     

主题:符合您搜索条件的供应商:ttt

     

日期:8月15日星期六11:55:30 IST 2015

     

主题:符合您搜索条件的供应商:未来模式下的suto

     

日期:8月15日星期六11:55:33 IST 2015

     

主题:符合您搜索条件的供货商:2012年3月13日测试汽车

     

日期:8月15日星期六11:55:30 IST 2015

1 个答案:

答案 0 :(得分:2)

似乎Folder#getMessages()不保证邮件的特定顺序。所以你必须自己排序:

ArrayUtils.sort(messages, new Comparator<Message>() {
    @Override
    public int compareTo(Message m1, Message m2) {
        return m2.getReceivedDate().compareTo(m1.getReceivedDate());
    }
});