Calendar today = Calendar.getInstance();
today.setTime(new Date());
Calendar prevTime = Calendar.getInstance();
prevTime.setTime(new Date());
prevTime.add(Calendar.MINUTE, Integer.parseInt(emailProps.getProperty("MINS_DIFF")) * -1 );;
ReceivedDateTerm minDateTerm = new ReceivedDateTerm(ComparisonTerm.GE, new Date(prevTime.getTimeInMillis()));
ReceivedDateTerm maxDateTerm = new ReceivedDateTerm(ComparisonTerm.LE, new Date(today.getTimeInMillis()));
SearchTerm term = null;
term = new AndTerm(minDateTerm,maxDateTerm);
logger.debug("Filtering the date bw "+ new Date(prevTime.getTimeInMillis()).toString() + " and " +new Date(today.getTimeInMillis()).toString());
Message messages[] = folder.search(term);
以上是我的代码段,我已经在两次之间应用了searchterm
,但过滤器仍无法正常工作,它会返回一整天的电子邮件。例如,对于26th dec,我的搜索文件夹中有10封电子邮件,其中只有2封电子邮件在我的时间段内收到了我在代码中提到的内容。这里searchterm
给我发了10封电子邮件。
答案 0 :(得分:0)
IMAP协议仅允许基于日期而非时间进行搜索。
您可以使用Folder.search将列表缩小到您感兴趣的日期,然后将SearchTerm.match方法应用于列表中的每条消息,这将在客户端上执行匹配测试而不是要求服务器这样做,因此能够进行精确的时间匹配。