php : imap 消息序列号在删除一封电子邮件后发生变化

php : imap message sequence number gets changed after deleting one email

我有一个应用程序,人们可以在其中通过 IMAP 配置电子邮件帐户并执行阅读电子邮件、删除、移动等操作。我面临的问题是删除一封电子邮件时其他电子邮件也被删除。调试后我发现2个用户配置了相同的电子邮件帐户,他们在不刷新页面的情况下从2个不同的浏览器删除电子邮件。

实际上,在删除一封电子邮件后,imap_fetch_overview 返回的 msgno 发生了变化,但在其他页面中,相同的邮件仍然打开,并具有旧的 msgno,并且在删除该电子邮件后,其他邮件也被删除。

检查 msgno before and after delete

在上面的示例中,删除主题为 "test 4" 的邮件后,"test 6"、"test 7"、"test 8" 的 msgno 会发生变化。现在,如果之前打开过邮件的其他用户尝试删除主题为 "test 7" 的邮件,实际上将删除主题为 "test 8".

的邮件

要删除电子邮件,我正在使用 imap_delete 函数,该函数将 msgno 作为参数。请帮助如何处理此类问题,或者有没有办法为每封不会更改的邮件获取唯一标识符,使用该标识符我还可以执行 IMAP 操作,如删除、移动等。

改用唯一 ID。我认为所有 PHP 函数都有一个标志(如 FT_UID?)来表示使用 UID 而不是序列号。

删除消息可能会弄乱序列 ID,尤其是当您没有注意 EXPUNGE 响应时。