(PHP 4, PHP 5)
imap_mail_copy — Copy specified messages to a mailbox
$imap_stream
, string $msglist
, string $mailbox
[, int $options
= 0
] )
Copies mail messages specified by msglist
to specified mailbox.
imap_stream
由 imap_open() 返回的 IMAP 流。
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
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Ben (2013-01-26 13:18:22)
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.
richard dot oplustil at gmail dot com (2012-03-26 15:18:41)
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.
fongming at fonn dot fongming dot idv dot tw (2004-08-29 03:42:13)
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>";
}
marcus at names dot co dot uk (2002-07-08 10:51:40)
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 (2001-01-04 16:37:35)
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.