phpday 2025 - Call For Papers

imap_mail_move

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

imap_mail_moveПеремещает указанные сообщения в указанный почтовый ящик

Описание

imap_mail_move(
    IMAP\Connection $imap,
    string $message_nums,
    string $mailbox,
    int $flags = 0
): bool

Перемещает письма, заданные в параметре 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; раньше параметр ждал ресурс (resource) imap.

Примечания

Замечание:

Функция imap_mail_move() помечает оригинальное сообщение флагом удаления, так что не забудьте после неё вызвать функцию imap_expunge().

Смотрите также

  • imap_mail_copy() - Копирует сообщения в указанный почтовый ящик

Добавить

Примечания пользователей 3 notes

up
8
FredN
4 years ago
to get right the folders names for imap_mail_move/imap_mail_copy, do not guess, instead use imap_list
up
8
alex at bestgames dot ro
19 years ago
After using imap_mail_move, imap_mail_copy or imap_delete it is necesary to call imap_expunge() function.
up
1
jab_creations at yahoo dot com
4 days ago
The imap_mail_move() function's second parameter (message_nums parameter) accept two valid values:

Individual message number:
47

or

Array:
47,58,112

Remember four key things in combination!

1. This move function does not move anything, internally it creates a copy and then deletes the original!

2. You should be tracking the Message-Id header (that should be set!) internally to confirm the unique IMAP id.

3. Because when a message is pseudo-"moved" the original message and unique IMAP id are lost! That means after the internal copy (or to us, having been moved) is created you will then have to create a new connection to the second mailbox folder, list or search and verify by internal message identifiers to keep your mail shell synchronized with the external server. Which then in turn means...

4. You will have to track the copied message after it is destroyed in the first mailbox folder. That gives you two logical approaches to use:

4.1 Individually move the message then simply get an index of the destination folder (e.g. moving from inbox to trash), "move" the message using this command, getting the index of the trash mailbox folder and comparing the arrays to determine the oddball out.

4.2 But in reality we're moving multiple messages in a single go so you can scan the mailbox folder for each message however this presumes that the header (e.g. Message-Id) exists.

Example search:
$result = imap_search($mail_connection_folder_trash, "TEXT \"<24322757.12578452.2416351620568@domain.tld>\"", SE_UID);

In my limited experience of a few thousand emails only spammers or devastatingly underpaid developers have not set the Message-Id. You can not presume however that the missing header implies spam as my original system never set it. Hence why it may be necessary to search by a secondary or tertiary means in more non-common scenarios with oddball messages. This may occur in one-in-several thousand instances.

Hopefully this logic will spare a few people the time spent on conceptual work.
To Top