无法使用SearchTerm term = new MessageIDTerm(ID)按邮件ID搜索邮件

时间:2013-10-21 04:08:11

标签: javamail

我在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和比较),并且需要花费大量时间才能找到结果。

第一种方式,服务器为我的请求进行搜索并且非常快。

那么,如果我使用第二种方式,如何以第一种方式快速进行搜索?

1 个答案:

答案 0 :(得分:0)

有些服务器坏了。你无法解决它们。

如果您必须在客户端进行搜索,那么您可以做的最好的事情就是使用Folder.fetch方法预取您需要进行搜索的标头。然后在迭代所有需要检查的消息时,使用带有Message.match方法的标准MessageIDTerm。