Получить электронную почту в соответствии с датой времени, используя javamail в Android - PullRequest
3 голосов
/ 18 января 2012

Я выполняю задачу по извлечению gmail. Мне удалось получить с помощью приведенных ниже кодов. Тем не менее, он получил полученную электронную почту от самой ранней до последней электронной почты в папке входящих сообщений Gmail. Есть ли способ заставить его получать последние письма? Я намерен реализовать способ получения только последних 20 писем вместо извлечения всех писем в папке «Входящие». Заранее спасибо за руководство.

public ArrayList<HashMap<String, String>> getMail(int inboxList){
        Folder inbox;
         /*&nbsp; Set the mail properties&nbsp; */
         Properties props = System.getProperties();
         props.setProperty("mail.store.protocol", "imaps");
         try
         {
             /*&nbsp; Create the session and get the store for read the mail. */
             Session session = Session.getDefaultInstance(props, null);
             Store store = session.getStore("imaps");
             store.connect("imap.gmail.com",username, password);

             /*&nbsp; Mention the folder name which you want to read. */
             inbox = store.getFolder("Inbox");
             System.out.println("No of Unread Messages : " + inbox.getUnreadMessageCount());
             /*Open the inbox using store.*/
             inbox.open(Folder.READ_WRITE);
             /*&nbsp; Get the messages which is unread in the Inbox*/
             Message messages[];
             if(recent){
                 messages = inbox.search(new FlagTerm(new Flags(Flag.RECENT), false));
             }else{
                 messages = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false));
             }

             /* Use a suitable FetchProfile&nbsp;&nbsp;&nbsp; */
             FetchProfile fp = new FetchProfile();
             fp.add(FetchProfile.Item.ENVELOPE);
             fp.add(FetchProfile.Item.CONTENT_INFO);
             inbox.fetch(messages, fp);

             try
             {
                 printAllMessages(messages);
                 inbox.close(true);
                 store.close();
             }
             catch (Exception ex)
             {
                 System.out.println("Exception arise at the time of read mail");
                 ex.printStackTrace();
             }
         }
         catch (NoSuchProviderException e)
         {
             //e.printStackTrace();

             System.exit(1);

         }
         catch (MessagingException e)
         {
             //e.printStackTrace();

             System.exit(2);
         }

Ответы [ 3 ]

10 голосов
/ 22 февраля 2012

Вместо использования inbox.search() используйте

 inbox.getMessages(int start,int end);

для получения диапазона сообщений.

Чтобы получить последние 20 писем, используйте:

int n=inbox.getMessageCount();
messages= inbox.getMessages(n-20,n);
3 голосов
/ 18 января 2012

Если вы просто хотите получить последние 20 сообщений, просто запросите последние 20 номеров сообщений или получите доступ к последним 20 записям в массиве, возвращаемом folder.getMessages ().Не то, чтобы порядок сообщений в почтовом ящике был порядком их поступления, а не тем, в котором они были отправлены.

2 голосов
/ 18 января 2012

Использовано сообщение android.os.Message

  static class DateCompare implements Comparator<Message> {

            public int compare(Message one, Message two){

            return one.getWhen().compareTo(two.getWhen());        
            }        
        }

............ 

 DateCompare compare = new DateCompare();
     Message messages[];
         if(recent){
             messages = inbox.search(new FlagTerm(new Flags(Flag.RECENT), false));
         }else{
             messages = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false));
         }    
           List<Message> list = Arrays.asList(messages );
           Collections.sort(list,compare);
           List<Messsage> newList = list.subList(0,19);

надеюсь, это поможет.

...