我正在完成检索电子邮件的任务。我设法使用以下代码检索。但是,它从gmail收件箱中的最早到最新的电子邮件中检索收到的电子邮件。有没有办法让它检索到最新的邮件?我打算实现一种方法来检索最新的20封邮件,而不是检索收件箱中的所有邮件。提前感谢您的指导。
public ArrayList<HashMap<String, String>> getMail(int inboxList){
Folder inbox;
/* Set the mail properties */
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
try
{
/* 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);
/* 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);
/* 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 */
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);
}
答案 0 :(得分:10)
而不是使用inbox.search()
使用
inbox.getMessages(int start,int end);
它将检索消息范围。
要获取最新的20封邮件:
int n=inbox.getMessageCount();
messages= inbox.getMessages(n-20,n);
答案 1 :(得分:3)
如果您只想要最后20条消息,只需询问最后20条消息号码, 或访问folder.getMessages()返回的数组中的最后20个条目。 不是邮箱中的邮件顺序是它们到达的顺序, 不是他们被发送的顺序。
答案 2 :(得分:2)
使用了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);
希望这会有所帮助。