在IMAP中,消息编号基于消息被放入文件夹的时间(即文件夹中的第一条消息是1,第二条消息是2,等等).但是,此排序不考虑消息的接收日期.我关心的是比文件夹的第1号消息更早的消息,即用户手动(而不是在它被接收到系统中时)移动到文件夹中的消息.
我不能只收到每条消息的收到日期,因为这是非常糟糕的.
我以为我可以进行JavaMail搜索以获取收到的日期早于第一条消息的接收日期的所有消息(并且同样进行搜索以获取所有收到的日期比第一条消息的接收日期更新的消息...会很多,但是虽然我需要处理所有旧的,但我只需要处理一些较新的,(并且通过流程,我的意思是下载它的标题).
但是,当我使用搜索时,它似乎无法正常工作.
Message[] messages = csqFolder.getMessages();
if (messages != null && messages.length > 0) {
Date receivedDate = messages[0].getReceivedDate();
log.trace("Message 1 receivedDate: <" + receivedDate.toString() + ">");
SearchTerm msgsOlderThanOETFirst =
new ReceivedDateTerm(DateTerm.LT, receivedDate);
SearchTerm msgsNewerThanFirst =
new ReceivedDateTerm(DateTerm.GT, receivedDate);
Message[] oldMsgs = csqFolder.search(msgsOlderThanOETFirst, messages);
log.trace("Size of oldMsgs: <" + oldMsgs.length + ">");
Message[] newMsgs = csqFolder.search(msgsNewerThanFirst, messages);
log.trace("Size of newMsgs: <" + newMsgs.length + ">");
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这些搜索时,它似乎没有给出正确的结果.
在包含8条消息的文件夹中,其中7条消息的日期时间为8月5日中午12点左右,但文件夹中的第一条消息是8月5日下午4点,我们将看到以下内容:
Message 1 receivedDate: <Fri Aug …Run Code Online (Sandbox Code Playgroud) 我想要获取最近1小时内收到的邮件.我在这里查了一下 -
并尝试以下 -
DateTime current = new DateTime();
DateTime oneHourLess = current.minusHours(1);
SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT, current.toDate());
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, oneHourLess.toDate());
SearchTerm andTerm = new AndTerm(olderThan, newerThan);
Message totalMess[] = inbox.search(andTerm);
Run Code Online (Sandbox Code Playgroud)
但由于ReceivedDateTerm没有花时间考虑,我没有收到任何邮件.
有什么方法可以做到这一点吗?