【问题标题】:Why is Gmail returning a UID outside the range specified by UID FETCH command?为什么 Gmail 返回 UID FETCH 命令指定范围之外的 UID?
【发布时间】:2016-06-23 05:29:02
【问题描述】:

当我运行提取命令 UID FETCH 170930:170930 BODY[] 时,我得到了响应 88924 FETCH (UID 170920 FLAGS (\Seen))。我没想到会检索到 UID 超出指定范围的消息。这是正常的 IMAP 行为吗? 170930 UID 来自刚才使用 IdleManager 观察文件夹,所以我没有理由相信服务器上不存在具有该 UID 的消息。

我在此处发布的获取请求是基于我用来执行它的 Java 代码的猜测。至少它应该仍然只请求该范围内的消息:

Argument args = new Argument();
args.writeString(Long.toString(start) + ":" + Long.toString(end));
args.writeString("BODY[]");
Response[] r = protocol.command("UID FETCH", args);
Response response = r[r.length - 1];

【问题讨论】:

  • 开始:和结束:不是有效的语法。我很惊讶这完全有效。
  • 我已经更新了问题,我实际上是从一些 Java 代码发出请求,所以我猜测原始输出。
  • 你能打开JavaMail session debugging并发布调试输出显示这个吗?
  • 另外,您为什么使用这些低级内部 JavaMail 类而不是 javax.mail 类?
  • 谢谢比尔。我将很快包含调试并使用输出更新问题。我使用低级别访问作为自定义 ProtocolCommand 的一部分,以在单个请求中获取大量电子邮件的正文。在此示例中,范围针对单个 UID,但在其他示例中,我在一次提取中检索数百个。 AFAIK 无法在 JavaMail 中指定一个提取配置文件,该配置文件将在使用 folder.fetch 时检索所有包含的正文。

标签: jakarta-mail imap gmail-imap


【解决方案1】:

在某些情况下,需要 IMAP 服务器向您发送 FETCH 响应。有时服务器需要等待响应,但从来没有要求向您发送任何响应。

如果您发送一个需要两次响应的命令,而其他人执行了需要一次响应的操作,那么您会收到三个响应。这可能是更改消息上的标志(需要 FETCH ... FLAGS ... 给您,尽管没有及时性要求)或向您发送一些邮件(需要 EXISTS 给您)。

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 2012-11-08
    • 2022-01-24
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2016-03-06
    相关资源
    最近更新 更多