【问题标题】:Searching emails from gmail is not working从 gmail 搜索电子邮件不起作用
【发布时间】:2015-12-03 15:30:23
【问题描述】:

我遵循了这个:Reading email from gmail is not working,我能够获取所有电子邮件。但是,当我使用搜索参数时,我总是得到 0 个结果。这是我尝试过的:

  Date d1 = new DateTime(date.getTime()).toLocalDate().toDate();
  Date d2 = new DateTime(date.getTime()).plusDays(-30).toLocalDate().toDate();
  SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT, d1);
  SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, d2);
  SearchTerm andTerm = new AndTerm(olderThan, newerThan);

  Message[] messages = emailFolder.search(andTerm);

如果我将最后一行更改为

  Message[] messages = emailFolder.getMessages();

一切正常,我收到所有电子邮件。我的收件箱中有过去 30 天内收到的电子邮件。我的搜索逻辑有问题吗?

【问题讨论】:

  • 我通过将 ReceivedDateTerm 更改为 SentDateTerm 来完成这项工作。

标签: java email gmail jakarta-mail


【解决方案1】:

您缺少下面的代码行,您必须覆盖 match 方法并将条件放在那里

    // creates a search criterion
    SearchTerm searchCondition = new SearchTerm() {
        @Override
        public boolean match(Message message) {
            try {
                if (message.getSubject().contains(keyword)) {
                    return true;
                }
            } catch (MessagingException ex) {
                ex.printStackTrace();
            }
            return false;
        }
    };

    // performs search through the folder
    Message[] foundMessages = folderInbox.search(searchCondition);

    for (int i = 0; i < foundMessages.length; i++) {
        Message message = foundMessages[i];
        String subject = message.getSubject();
        System.out.println("Found message #" + i + ": " + subject);
    }

编辑:-

SearchTerm andTerm = null;
andTerm = new AndTerm(andTerm, olderThan);  //concat the search terms
andTerm = new AndTerm(andTerm, newerThan );
Message messages[] = folderInbox.search(andTerm);    //search on the imap server

编辑 1:-

for (Message message : messages) {
    if (message.getSentDate().after(olderThan) && message.getSentDate().before(newerThan))
       {
          //do whatever you want with your filtered by period message
       } 
}

【讨论】:

  • 这并没有改变任何东西,结果相同。还有其他指针吗?
  • 尝试搜索关键字并告诉我是否得到结果?
  • @Jayz 请尝试编辑代码并告诉我结果。
  • 当您进行此搜索时,JavaMail debug output 会显示什么?
  • @SubodhJoshi,第一个编辑的代码不起作用,抛出空指针,因为这一行“andTerm = new AndTerm(andTerm, oldThan);”第一行的 andTerm 为空。第二次编辑的代码显然有效,因为它在收到所有消息后会过滤掉,但我想这是非常低效的。
猜你喜欢
  • 2015-04-09
  • 2015-03-28
  • 2014-06-03
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 2015-12-24
  • 2017-01-22
  • 1970-01-01
相关资源
最近更新 更多