我在Android上开发了一个电子邮件应用程序,我被困在这里。如果我使用Gmail服务器,我可以按ID搜索电子邮件
SearchTerm term = new MessageIDTerm(ID);
message_s = folder.search(term);
但是使用此代码,我无法使用其他服务器(如yahoo,hotmail)搜索电子邮件。我尝试通过覆盖此代码来解决此错误
SearchTerm messageIDTerm= new SearchTerm() {
@Override
public boolean match(Message message) {
try {
String messageID="";
Enumeration headers = message.getAllHeaders();
while (headers.hasMoreElements()) {
eader h = (Header) headers.nextElement();
String mID = h.getName();
if(mID.contains("Message-ID") || mID.contains("Message-Id")){
messageID= h.getValue();
}
}
if (messageID.contains(ID)) {
return true;
}
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
};
message_s = folder.search(messageIDTerm);
搜索邮件很成功。但问题是此代码通过客户端搜索检查每个Message-ID(下载messeage-ID和比较),并且需要花费大量时间才能找到结果。
第一种方式,服务器为我的请求进行搜索并且非常快。
那么,如果我使用第二种方式,如何以第一种方式快速进行搜索?
答案 0 :(得分:0)
有些服务器坏了。你无法解决它们。
如果您必须在客户端进行搜索,那么您可以做的最好的事情就是使用Folder.fetch方法预取您需要进行搜索的标头。然后在迭代所有需要检查的消息时,使用带有Message.match方法的标准MessageIDTerm。