要正确获取 imap_mail_move/imap_mail_copy 的文件夹名称,请不要猜测,而是使用 imap_list
(PHP 4, PHP 5, PHP 7, PHP 8)
imap_mail_move — 将指定的消息移动到邮箱
将由 message_nums
指定的邮件消息移动到指定的 mailbox
。请注意,邮件消息实际上是复制到 mailbox
,并且原始消息被标记为删除。这意味着 mailbox
中的消息被分配了新的 UID。
imap
一个 IMAP\Connection 实例。
message_nums
message_nums
是一个范围,而不仅仅是消息编号(如 » RFC2060 中所述)。
mailbox
邮箱名称,有关更多信息,请参见 imap_open()
除非禁用 imap.enable_insecure_rsh,否则将不可信数据传递给此参数是不安全的。
flags
flags
是一个位掩码,可能包含单个选项
CP_UID
- 序列号包含 UID
版本 | 描述 |
---|---|
8.1.0 | imap 参数现在期望一个 IMAP\Connection 实例;以前,期望一个有效的 imap 资源。 |
注意:
imap_mail_move() 将使用删除标记标记原始邮件,要成功删除它,必须调用 imap_expunge() 函数。
使用 imap_mail_move、imap_mail_copy 或 imap_delete 后,有必要调用 imap_expunge() 函数。
imap_mail_move() 函数的第二个参数(message_nums 参数)接受两个有效值
单个邮件编号
47
或
数组
47,58,112
记住组合中的四件关键事项!
1. 此移动函数不会移动任何内容,在内部它会创建一个副本,然后删除原始副本!
2. 您应该在内部跟踪 Message-Id 标头(应设置!),以确认唯一的 IMAP ID。
3. 因为当伪“移动”消息时,原始消息和唯一的 IMAP ID 会丢失!这意味着在创建内部副本(或对我们来说,已移动)后,您将必须创建到第二个邮箱文件夹的新连接,列出或搜索并通过内部消息标识符进行验证,以使您的邮件外壳与外部服务器同步。这反过来又意味着……
4. 您将必须跟踪复制的消息,因为它在第一个邮箱文件夹中被销毁。这为您提供了两种逻辑方法可以使用
4.1 单独移动邮件,然后简单地获取目标文件夹的索引(例如,从收件箱移动到垃圾箱),使用此命令“移动”邮件,获取垃圾邮箱文件夹的索引并将数组进行比较以确定异常值。
4.2 但实际上我们一次移动多封邮件,因此您可以扫描每个邮件的邮箱文件夹,但这假设存在标头(例如 Message-Id)。
示例搜索
$result = imap_search($mail_connection_folder_trash, "TEXT \"<[email protected]>\"", SE_UID);
在我有限的几千封电子邮件的经验中,只有垃圾邮件发送者或严重报酬过低的开发人员没有设置 Message-Id。但是,您不能假设缺少的标头意味着垃圾邮件,因为我的原始系统从未设置它。因此,在更不常见的情况下,对于异常邮件,可能需要通过辅助或三级方式进行搜索。这可能会在几千个实例中出现一个。
希望此逻辑可以为一些人节省在概念工作上花费的时间。