PHP 8.1.28 Released!


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

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


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

Копирует заданные в параметре message_nums письма в указанный почтовый ящик.

Список параметров


Экземпляр класса IMAP\Connection.


message_nums - это диапазон, а не просто номера сообщений (как определено в » RFC2060).


Имя почтового ящика. Более подробно читайте в разделе, посвящённом функции imap_open()


Если imap.enable_insecure_rsh не отключён, то передача в этот параметр не проверенных данных не безопасна.


flags - битовая маска одной или нескольких констант:

  • CP_UID - означает, что в первом параметре не номера сообщений, а их UID.
  • CP_MOVE - удалить оригинальные сообщения после копирования. Если этот флаг установлен, функция ведёт себя идентично функции imap_mail_move().

Возвращаемые значения

Возвращает true в случае успешного выполнения или false, если возникла ошибка.

Список изменений

Версия Описание
8.1.0 Параметр imap теперь ожидает экземпляр класса IMAP\Connection; раньше параметр ждал ресурс (resource) imap.

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

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

add a note

User Contributed Notes 5 notes

marcus at names dot co dot uk
21 years ago
If you are having problems getting imap_mail_copy and imap_mail_move to work, check you have installed imap_devel (the imap development libraries) as well as imap (the imap daemon). Without it, PHP appears to configure correctly --with-imap, but some functions do not work.

It took me about 12 hours to figure this out!!
hxlvt at hotmail dot com
23 years ago
After much fooling around, imap_mail_copy did work for me. One thing you might want to check, if you are having problems, is the new mailbox name. Make sure it is just a folder name, e.g. INBOX.haha without the server part.
11 years ago
If you use this function and you get the following notice:

Notice: Unknown: IMAP protocol error: Could not parse command (errflg=2) in Unknown on line 0

Notice: Unknown: Could not parse command (errflg=2) in Unknown on line 0

you should check the function parameters. This notice appears (according to what I found on the internet and my problems) when it gets an invalid $msglist. So be sure to give the right number (as a String!):
"$msg_num", $msg_num or (string) $msg_num.

Dont use '$msg_num' when calling the function, this will literally send the string $msg_num.
You can give a string like "1,3,5,7,8", which will work perfectly fine to move the given mails.

I had all my mailnumbers in an array ( $messageSet) and used

= implode ( "," , $messageSet );

imap_mail_copy( $imapStream, $messageSetImpl, $mailBox )

What I hadn't had thougt of was that my $messageSet was sometimes empty, that was when I got the notice. So you might want to check that by putting first:

if ( !( empty( $messageSet ) ) ) {

$messageSetImpl = implode ( "," , $messageSet );

imap_mail_copy( $imapStream, $messageSetImpl, $mailBox )


That should work.
jigar dot dhaduk79 at gmail dot com
8 years ago
When we want to copy more than one mail, we can write '(string)' before msg_num. Like..

$msg_num = "1,2,3,4,5,6,7";
$copy = imap_mail_copy($imap_stream, (string) $msg_num, '[Gmail]/Important', CP_UID);
richard dot oplustil at gmail dot com
12 years ago
imap_ mail_ move and imap_mail_copy don't work with sequence numbers on MS Exchange. imap_ uid in combination with CP_UID works fine.
To Top