使用标准规范IMAP命令,如何根据传递的UID确定邮箱中的上一个和下一个UID,按日期排序邮箱邮件,最新的?
答案 0 :(得分:8)
我找到了新邮件UID ,代码如下。
@Override
public void messagesAdded(MessageCountEvent e) {
try {
long newMailUID = ((IMAPFolder) e.getSource()).getUIDNext()
} catch (MessagingException e1) {
e1.printStackTrace();
}
}
答案 1 :(得分:3)
假设“按日期排序邮箱邮件,最新的第一个”是指邮件添加到邮箱而不是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到序列:
A001 UID FETCH 82342 UID
* FETCH 83 (UID 82342)
A001 OK UID FETCH completed
答案 2 :(得分:2)
我认为唯一的方法是首先要求所有UID:
UID SEARCH ALL
......并排序。添加到邮箱的每条消息都分配了比以前添加的消息更高的UID。
如此高的UID =较新的电子邮件。
答案 3 :(得分:0)
如果要在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的结果”。
答案 4 :(得分:-3)