【问题标题】:Tracking mechanism for Gmail: IMAP and POP3 messages in Java(API)Gmail 的跟踪机制:Java(API) 中的 IMAP 和 POP3 消息
【发布时间】:2015-08-06 15:55:53
【问题描述】:

我正在开发一个 Java 应用程序,我想同步 Gmail 邮件。我真正想要的是通过我的应用程序为电子邮件开发跟踪机制。假设如果在我的应用程序中我已经阅读了当前时间的消息,并假设它的(最新)消息 ID 是 msg123。过了一会儿,如果在我的收件箱中有新消息到达。我只想阅读那些新到的邮件。就像新消息的 ID 为 msg124、msg125 和 msg126。我只想阅读那些具有消息 ID - msg124、msg125 和 msg126 的消息。

所以我的问题是:

1.如果我使用 POP3/IMAP 服务器使用凭据连接到 Gmail,是否可以仅查询那些比上次阅读邮件时间戳更新的电子邮件?

2. 在我的搜索中,我发现了这个链接,它指出使用 OAuth 我们可以实现邮件跟踪(如我所愿)。文档参考链接Gmail API。如果我的方向错误,请建议我。

【问题讨论】:

    标签: synchronization gmail jakarta-mail google-oauth


    【解决方案1】:

    OAuth 与此问题无关,Gmail API 不会让这变得更容易。

    您确实需要了解 IMAP UID,通过 IMAP 文件夹实现的 UIDFolder interface 在 JavaMail 中公开。

    如果您跟踪您处理的最后一个 UID,您可以查询大于使用 UIDFolder.getMessagesByUID method 的 UID。

    【讨论】:

    • 感谢您按照您建议的 IMAP 工作方式的回复。但我仍然停留在 POP3 部分。
    • 如果您只使用 Gmail,那么您真的想使用 IMAP,而不是 POP3。 POP3 支持 UID,但它们与 IMAP 不同,因此不支持 UIDFolder。 POP3 UID 是未排序的字符串。您需要跟踪您见过的所有 UID,然后询问收件箱中所有邮件的所有 UID,以确定哪些邮件您还没有看到。您需要使用 com.sun.mail.pop3.POP3Folder API。
    • @Bill Shannon 使用 docs ref 预取所有消息的所有 UID:FetchProfile fp = new FetchProfile(); fp.add(UIDFolder.FetchProfileItem.UID); folder.fetch(folder.getMessages(), fp);public Message[] getMessages() "docs 说,文件夹实现有望提供轻量级重量消息对象。”获得的消息对象 {getMessages()} 包含其他详细信息,如内容等。如果是这种情况,那么您能否建议仅检索 UID 的确切方法。
    • 您的代码是正确的。 Message 对象只是服务器上数据的一个外观。当您调用 getContent(例如)时,它将发出 IMAP 命令从服务器获取数据。
    猜你喜欢
    • 2013-05-29
    • 2016-01-17
    • 2015-01-26
    • 1970-01-01
    • 2011-01-11
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    相关资源
    最近更新 更多