dismiss Step into the future! Click here to switch to the beta php.net site
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

imap_mail_move> <imap_mail_compose
[edit] Last updated: Fri, 28 Jun 2013

view this page in

imap_mail_copy

(PHP 4, PHP 5)

imap_mail_copyCopy specified messages to a mailbox

Description

bool imap_mail_copy ( resource $imap_stream , string $msglist , string $mailbox [, int $options = 0 ] )

Copies mail messages specified by msglist to specified mailbox.

Parameters

imap_stream

An IMAP stream returned by imap_open().

msglist

msglist is a range not just message numbers (as described in » RFC2060).

mailbox

The mailbox name, see imap_open() for more information

options

options is a bitmask of one or more of

  • CP_UID - the sequence numbers contain UIDS
  • CP_MOVE - Delete the messages from the current mailbox after copying

Return Values

Returns TRUE on success or FALSE on failure.

See Also



imap_mail_move> <imap_mail_compose
[edit] Last updated: Fri, 28 Jun 2013
 
add a note add a note User Contributed Notes imap_mail_copy - [5 notes]
up
0
Ben
5 months 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

<?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.
up
0
richard dot oplustil at gmail dot com
1 year 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.
up
0
marcus at names dot co dot uk
10 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!!
up
0
hxlvt at hotmail dot com
12 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.
up
-1
fongming at fonn dot fongming dot idv dot tw
8 years ago
when you list your mailbox,you have to decode the mailbox name, use imap_utf7_decode();

for example:
//----------------------------------------------------
$host="localhost";
$port=143;
$ht="{".$host.":".$port."/imap/notls}INBOX";
$mbox=imap_open($ht,$my_user,$my_pass)or die("can't open mail ");
$mail_list=imap_listmailbox($mbox,$ht,"*");
       sort($mail_list);
       foreach($mail_list as $k=>$v)
       {
       $v_list=explode("}",$v);
       echo imap_utf7_decode(str_replace("INBOX.","",$v_list[1]));
       echo "<BR>";
       }

 
show source | credits | stats | sitemap | contact | advertising | mirror sites