我想指出,至少在 Gmail 的情况下,如果电子邮件从一个文件夹移动到另一个文件夹,其 UID 会发生变化。即使移动回同一个文件夹,UID 也会递增,从而发生变化。
我在依赖 UID 不会发生变化的概念后,以这种方式发现了这一点,因为我在几乎所有文档中都发现了这一点。
(PHP 4, PHP 5, PHP 7, PHP 8)
imap_uid — 此函数返回给定消息序列号的 UID
给定消息的 UID。
版本 | 说明 |
---|---|
8.1.0 | 现在 imap 参数期望一个 IMAP\Connection 实例;以前,期望一个有效的 imap 资源。 |
注意:
此函数不受 POP3 邮箱支持。
我想指出,至少在 Gmail 的情况下,如果电子邮件从一个文件夹移动到另一个文件夹,其 UID 会发生变化。即使移动回同一个文件夹,UID 也会递增,从而发生变化。
我在依赖 UID 不会发生变化的概念后,以这种方式发现了这一点,因为我在几乎所有文档中都发现了这一点。
如果您想要模拟 POP3 UIDL 支持,那么您可以使用我的 imap 函数包装器类,或者只复制/修改其标头到 UIDL 哈希方法
https://github.com/cmanley/PHP-IMAP-Client/
关于 Andreas 关于 imap_expunge() 的注释的澄清...
imap_expunge() 确实会改变 UID,但只有在 IMAP 流关闭并重新连接后才会改变。
您可以在一个 IMAP 流(无重新连接)中使用 imap_expunge() 多次,而 UID 会保持不变,而 Msgno 会随着 imap_delete() 后跟 imap_expunge() 的使用而改变。
MDaemon(以及可能其他服务器)中 PUBLIC 文件夹中的 UID 的一个小怪癖。如果服务器将存储标志选项设置为基于每个用户的,则 UID 在用户之间可能不同步。也就是说,一条消息对于一个用户来说可能是 UID 5(意味着它是进入邮箱的第 5 条消息),而对于另一个用户来说可能是 UID 3(也许他后来订阅了这个邮箱)。如果这是个问题,请为邮箱关闭基于每个用户的选项。