2015-08-16 34 views
0
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(); 
}} 

在上面的代碼中,我可以從我的控制檯從gmail獲取最早到最新的電子郵件。不過,我希望它從最新到最舊。有什麼辦法可以實現這個目標嗎?請幫助:)從最新到最舊的Java郵件API檢索電子郵件

回答

1

我不認爲在JavaMail API中有這樣的參數或方法。您必須自己撤銷messages陣列,例如通過包括Commons.Lang庫:

messages = ArrayUtils.reverse(messages); 

或在另一個方向上遍歷它:

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

感謝格洛芬德。解決了! –

相關問題