1

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 カウントが実際のメールよりもはるかに大きい数を返すため、IndexOutOfBoundsException が発生します。

javamail api を使用して Gmail から送信されたメールの正確な数を取得するにはどうすればよいですか? 私が得るエラーは -

java.lang.IndexOutOfBoundsException: 1986 > 1970

1986 は上記で取得した totalSentMails の値で、1970 は実際の送信メール数です。

4

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();
    }

このコードは完全に機能しています..お楽しみください:)

于 2014-01-08T13:12:27.190 に答える