有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Javamail从Gmail检索上次发送的邮件

我正在尝试使用Javamail api获取Gmail中最后发送的邮件。这是代码-

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imap");

try{
    Session session = Session.getDefaultInstance(props, null);
    Store store = session.getStore("imap");
    store.connect(mailbox, mailId, passwod);

    sent  = store.getFolder("[Gmail]/Sent Mail");
    int totalSentMails = sent.getMessageCount();

    sent.open(Folder.READ_ONLY);


    Message sentmesage = sent.getMessage(totalSentMails);
}
catch (NoSuchProviderException e){
      e.printStackTrace();
      System.exit(1);
}

由于getMessage count返回的数字远大于实际邮件数,因此我得到一个IndexOutOfBoundsException

我如何使用javamail api获得Gmail发送邮件的确切数量? 我得到的错误是-

java.lang.IndexOutOfBoundsException: 1986 > 1970

1986年是上述收到的邮件总数,1970年是实际发送的邮件数


共 (1) 个答案

  1. # 1 楼答案

    ***

    使用此代码阅读gmail已发送邮件文件夹、草稿、重要邮件、星号邮件、垃圾邮件、垃圾邮件、收件箱、所有邮件

    ***

        Properties props = new Properties();
    
        props.setProperty("mail.store.protocol", "imaps");
    
        try {
            Session session = Session.getInstance(props, null);
            Store store = session.getStore();
            store.connect("imap.gmail.com", "xxxxxxx@gmail.com", "gmailpassword");
            Folder[] folderList = store.getFolder("[Gmail]").list();
            for (int i = 0; i < folderList.length; i++) {
                System.out.println(folderList[i].getFullName());
            }
            Folder inbox = store.getFolder("[Gmail]/Sent Mail");
            inbox.open(Folder.READ_ONLY);
            Message msg = inbox.getMessage(inbox.getMessageCount());
            Address[] in = msg.getFrom();
            for (Address address : in) {
                System.out.println("FROM:" + address.toString());
            }
            Multipart mp = (Multipart) msg.getContent();
            BodyPart bp = mp.getBodyPart(0);
            System.out.println("Bcc User NAme :"+InternetAddress.toString(msg.getRecipients(Message.RecipientType.BCC)));
            System.out.println("SENT DATE:" + msg.getSentDate());
            System.out.println("SUBJECT:" + msg.getSubject());
            System.out.println("CONTENT:" + bp.getContent());
        } catch (Exception mex) {
            mex.printStackTrace();
        }
    

    这段代码运行得非常好。。享受:)