【问题标题】:IMAP COPY command - uid and Message-IdIMAP COPY 命令 - uid 和 Message-Id
【发布时间】:2011-03-24 04:30:53
【问题描述】:

我知道 UID 会发生变化,但在对特定邮件进行任何操作期​​间,Message-Id 不会发生变化。但是,经过一些操作,我想出了这个案例:

假设我的INBOX 中有一个total of 2000 emails。如果我将带有UID 1000Message-Id 10001000th 电子邮件复制到我的Trash 邮箱,然后将其复制回INBOX,则UID 将更改为2000,Message-Id 将更改为2000;该文件夹的当前。然后,无论日期如何,电子邮件都会在顶部。

现在的问题是,如果我 . fetch 1990:2000 fast(最后 10 封电子邮件),我将在提取的 10 封电子邮件中得到那封特定的电子邮件。您将如何根据日期提取最后 10 封电子邮件,而不必提取 2000 封电子邮件然后按日期对它们进行排序?

【问题讨论】:

  • 谢尔盖,你误会了。这里涉及到 3 条数据。只要邮件在文件夹中(并且只要文件夹的 UIDVALIDITY 不变),邮件的 UID 就保持不变。消息的序列号是它在按 UID 排序的消息列表中的位置 - 因此,如果您从文件夹中删除消息 1,则所有 UID 保持不变,但每条剩余消息的序列号都会减少 1。消息 ID 标头 消息是真正不变的 - 将其移至垃圾箱并返回,但它仍然具有相同的 Message-ID 标头。

标签: copy imap fetch


【解决方案1】:

如果 IMAP 服务器支持它,您可以为此使用 SORT 命令,如 RFC 5256 中所述。您正在寻找的具体命令可能是:

C: A11 SORT (REVERSE DATE) UTF-8 ALL
S: * SORT 5 3 4 1 2
S: A11 OK SORT completed

服务器响应是可用于后续提取的消息序列号列表。


如果您的服务器支持 SORT 扩展(现代 IMAP 服务器支持),它将在响应 CAPABILITY 命令时公布。这是我正在运行的古版 Courier-IMAP 的回应:

CAPABILITY
* CAPABILITY IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES
  SORT QUOTA LOGIN IDLE ACL ACL2=UNION STARTTLS

【讨论】:

  • 不幸的是,Gmail 似乎不支持它。 * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE 有其他选择吗?谢谢
  • @Sergey:不,如果 IMAP 服务器不支持服务器端排序,您唯一的选择是自己获取和排序。您不需要下载整条消息,但可以只获取它们的日期和 UID。
  • 谢谢!这就是我害怕的。我想知道在 10K 消息中仅获取他们的日期和 UID 需要多长时间
  • @Sergey:通常很快。 UID FETCH 1:* INTERNALDATE 将为您提供文件夹中所有邮件的 UID 和接收日期。
猜你喜欢
  • 2011-08-13
  • 2017-10-30
  • 2013-02-02
  • 2022-01-24
  • 2014-12-04
  • 2014-04-16
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多