IMAP - 获取上一个和下一个UID

时间:2010-10-08 14:33:30

标签: email imap

使用标准规范IMAP命令,如何根据传递的UID确定邮箱中的上一个和下一个UID,按日期排序邮箱邮件,最新的?

5 个答案:

答案 0 :(得分:8)

我找到了新邮件UID ,代码如下。

   @Override
        public void messagesAdded(MessageCountEvent e) {
         try {
             long newMailUID = ((IMAPFolder) e.getSource()).getUIDNext()
         } catch (MessagingException e1) {
             e1.printStackTrace();
         }
       }

答案 1 :(得分:3)

假设“按日期排序邮箱邮件,最新的第一个”是指邮件添加到邮箱而不是INTERNALDATEDate标头的时间:

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

需要注意的事项:

  • 如果邮箱中不存在UID,SEARCH将不会返回任何结果。
  • 如果UID与邮箱中的第一个/最后一个邮件匹配,请不要尝试在之前/之后获取该邮件,否则您将收到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)

我不熟悉确切的命令,但你检查过RFC吗?

http://tools.ietf.org/html/rfc3501

看起来您可以发送一个UIDNEXT命令,为您提供下一个UID。

相关问题