首页 > 解决方案 > 使用 PHP imap 移动并清除 \\Seen。两者都有效,两者都无效

问题描述

好的,我给。是时候寻求帮助了。

我需要使用 imap_mail_move 或 imap_mail_copy 将当前电子邮件移动到另一个文件夹并将其标记为未读。缺少文档,我无法找到结合使用这两个功能的示例。

imap_mail_move($inbox, $uniqueID, 'to_be_processed', CP_UID);
imap_clearflag_full($inbox, imap_uid($inbox, $uniqueID), '\\Seen', ST_UID);

我确实在最后删除。除未读部分外,一切正常。一旦我移动它,我认为ID会改变?

如果我让它工作,我希望你能帮助我理解为什么?我的一个问题是,一条消息在什么时候被标记为已读?

标签: phpimap

解决方案


IMAP 仅在逐个文件夹的基础上工作。移动邮件后,它就不再位于您正在处理的文件夹中,因此您无法再操作该邮件*。因此,您需要在移动消息之前对其进行更改。只需反转您的命令:

imap_clearflag_full($inbox, $uniqueID, '\\Seen', ST_UID);
imap_mail_move($inbox, $uniqueID, 'to_be_processed', CP_UID);

另外,不要在已经是 UID 的东西上调用 imap_uid() 。

*:从技术上讲,\Deleted 副本可能保留在源文件夹中,您正在操纵它,而不是移动的消息。


推荐阅读