PHP 大会日本 2024

imap_mail_move

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_mail_move将指定的消息移动到邮箱

描述

imap_mail_move(
    IMAP\Connection $imap,
    字符串 $message_nums,
    字符串 $mailbox,
    整数 $flags = 0
): 布尔值

将由 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

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
8.1.0 imap 参数现在期望一个 IMAP\Connection 实例;以前,期望一个有效的 imap 资源

备注

注意:

imap_mail_move() 将使用删除标记标记原始邮件,要成功删除它,必须调用 imap_expunge() 函数。

参见

添加注释

用户贡献的注释 3 条注释

8
FredN
4 年前
要正确获取 imap_mail_move/imap_mail_copy 的文件夹名称,请不要猜测,而是使用 imap_list
8
alex at bestgames dot ro
19 年前
使用 imap_mail_move、imap_mail_copy 或 imap_delete 后,有必要调用 imap_expunge() 函数。
1
jab_creations at yahoo dot com
1 天前
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。但是,您不能假设缺少的标头意味着垃圾邮件,因为我的原始系统从未设置它。因此,在更不常见的情况下,对于异常邮件,可能需要通过辅助或三级方式进行搜索。这可能会在几千个实例中出现一个。

希望此逻辑可以为一些人节省在概念工作上花费的时间。
To Top