0

我正在 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(下载 message-ID 并进行比较),并且需要很长时间才能找到结果。

第一种方式,服务器对我的请求进行搜索,而且速度非常快。

那么,如果我使用第二种方式,如何使搜索与第一种方式一样快呢?

4

1 回答 1

0

有些服务器坏了。你无法修复它们。

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

于 2013-10-21T06:32:02.577 回答