【发布时间】:2013-12-25 23:21:14
【问题描述】:
使用标准规范 IMAP 命令,我如何根据传递的 UID 确定邮箱中的上一个和下一个 UID,按日期对邮箱消息进行排序,最新的在前?
【问题讨论】:
使用标准规范 IMAP 命令,我如何根据传递的 UID 确定邮箱中的上一个和下一个 UID,按日期对邮箱消息进行排序,最新的在前?
【问题讨论】:
我找到了新邮件UID,代码如下。
@Override
public void messagesAdded(MessageCountEvent e) {
try {
long newMailUID = ((IMAPFolder) e.getSource()).getUIDNext()
} catch (MessagingException e1) {
e1.printStackTrace();
}
}
【讨论】:
假设“按日期对邮箱消息排序,最新在前”是指消息被添加到邮箱的时间,而不是INTERNALDATE 或Date 标头:
A001 SEARCH UID 82342
* SEARCH 83
A001 OK SEARCH completed
A002 FETCH 82,84 UID
* FETCH 82 (UID 82309)
* FETCH 84 (UID 82343)
A002 OK FETCH completed
注意事项:
SEARCH 将不返回任何结果。BAD 响应。如果您不想使用SEARCH,您也可以通过UID FETCH 执行 UID-to-sequence:
A001 UID FETCH 82342 UID
* FETCH 83 (UID 82342)
A001 OK UID FETCH completed
【讨论】:
我认为唯一的方法是首先询问所有 UID:
UID SEARCH ALL
...然后排序。添加到邮箱的每条消息都被分配了一个比之前添加的消息更高的 UID。
所以更高的 UID = 更新的电子邮件。
【讨论】:
如果你想搜索 12345 之前的 UID,这个命令就可以了:
a UID SEARCH RETURN (MAX) UID 1:12344
寻找下一个之后:
b UID SEARCH RETURN (MIN) UID 12346:*
这需要大多数现代服务器实现的ESEARCH extension。值得注意的是 gmail 实现了它。但是,在循环中发布有点太昂贵了,所以也许你最好用另一种方式解决你的问题。以下是获取 12345 之前的 50 个 UID 的两个命令序列:
c1 SEARCH UID 12345
* SEARCH 1000
c1 OK done
c2 UID SEARCH 950:999
* SEARCH 12200,12202,...
c2 OK done
950 是“c1 - 50 的结果”,999 是“c1 - 1 的结果”。
【讨论】:
【讨论】: