繁体   English   中英

从最新到最旧的Java Mail API检索电子邮件

[英]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 = "xxx@gmail.com";  //
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的控制台上获取从最早到最新的电子邮件。 但是,我希望它从最新循环到最旧循环。 有什么办法可以实现这一目标。 请帮忙 :)

我认为JavaMail API中没有针对此的参数或方法。 您必须自己反转messages数组,例如,通过包含Commons.Lang库:

messages = ArrayUtils.reverse(messages);

或在另一个方向上对其进行迭代:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM