【问题标题】:JavaMail: how to get new messages comparing with time-stampsJavaMail:如何获取与时间戳比较的新消息
【发布时间】:2011-06-06 17:47:07
【问题描述】:

我正在尝试在某个时间戳之后获取消息,我编码它的方式是由本网站的另一位程序员建议的:

GregorianCalendar date = new GregorianCalendar();
SearchTerm newer = new ReceivedDateTerm(ComparisonTerm.GT,date.getTime());
Message msgs[] = folder.search(newerThen);

问题是我收到了自日期以来的所有消息,而不是具体时间。我想知道是否有一些解决方法可以模拟这一点。我的意思是,例如,如果我想在中午收到自今天以来的所有消息,我会特别收到这些消息,而不是今天早上收到的那些消息。

提前致谢,

编辑:

对此有一个新想法:也许一些日期操作可以完成这项工作。我的意思是,比较时间戳中的分钟数并以编程方式过滤那些不符合标准的消息。我知道这不是最好的方法,但它可以工作。

PS:我正在使用 IMAP 并尝试从 gmail 获取邮件,但我想无论邮件服务器是什么,它都应该可以工作。

【问题讨论】:

  • 如果您将代码缩进 4 个空格,SO 会将其格式化为代码而不是可换行的文本块。

标签: imap jakarta-mail


【解决方案1】:

很遗憾,没有。在这种情况下,JavaMail 类和 IMAP 的 SEARCH 命令 takes only dates, not times 正在使用 IMAP 协议(​​请参阅 SINCESENTSINCE 标准)。

【讨论】:

  • 感谢 dkarp。进一步说,有没有办法模仿邮件代理获取新消息的行为?我的意思是,如果我只想获取新消息(而不是多次下载),我该怎么办?
  • 有几种方法可以做到这一点。您可以记住文件夹中最高的 UID,然后执行((UIDFolder) folder).getMessagesByUID(highuid + 1, UIDFolder.LASTUID)。您可以通过folder.search(new FlagTerm(new Flags(Flags.Flag.RECENT), true)) 获取自上次连接到该文件夹​​的 IMAP 客户端以来添加的所有消息,但如果其他 IMAP 客户端处于活动状态,这将不起作用。
  • 只是一个补充:您可以在文件夹上调用 getUIDNext() 来获取下一个 UID。那么你就不需要加+1了。此外,你应该存储IMAP UIDVALIDITY值并将其与folder.getUIDValidity()进行比较,以确保你仍然可以依赖存储的最高UID。查看此 IMAP 协议部分:datatracker.ietf.org/doc/html/rfc3501#section-2.3.1.1
【解决方案2】:

您可以使用setTime() 方法查询某个特定时间。

例子:

setTime(timeInMilliseconds)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2012-06-23
    • 2018-02-28
    • 2020-07-05
    • 2022-10-04
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多