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);
(PHP 4, PHP 5, PHP 7)
imap_mail_copy — Copie les messages spécifiés dans une boîte aux lettres
$imap_stream
, string $msglist
, string $mailbox
[, int $options
= 0
] ) : bool
Copie les messages email spécifiés par msglist
dans la
boîte aux lettres nommée mbox
.
imap_stream
Un flux IMAP retourné par la fonction imap_open().
msglist
msglist
est un intervalle, et pas seulement
une liste de numéros de message (comme décrit dans la » RFC2060).
mailbox
Le nom de la boîte aux lettres, voir la documentation de la fonction imap_open() pour plus de détails
Passer des données qui ne sont pas digne de confiance à ce paramètre est dangereux, sauf si, imap.enable_insecure_rsh est désactivé.
options
options
est un masque, qui peut contenir une ou plusieurs
des valeurs suivantes :
CP_UID
- la séquence de nombre contient des UIDS
CP_MOVE
- Efface les messages après copie
Cette fonction retourne TRUE
en cas de succès ou FALSE
si une erreur survient.
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);
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!!
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
<?php
$messageSetImpl = 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:
<?php
if ( !( empty( $messageSet ) ) ) {
$messageSetImpl = implode ( "," , $messageSet );
imap_mail_copy( $imapStream, $messageSetImpl, $mailBox )
}
?>
That should work.
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.
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.