2015-08-16 35 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

感谢格洛芬德。解决了! –

相关问题