imap_mail_copy
(PHP 4, PHP 5, PHP 7, PHP 8)
imap_mail_copy — Copy specified messages to a mailbox
说明
imap_mail_copy(
IMAP\Connection
string
string
int
): bool
IMAP\Connection
$imap
,string
$message_nums
,string
$mailbox
,int
$flags
= 0): bool
Copies mail messages specified by message_nums
to specified mailbox.
参数
-
imap
-
IMAP\Connection 实例。
-
message_nums
-
message_nums
is a range not just message numbers (as described in » RFC2060). -
mailbox
-
The mailbox name, see imap_open() for more information
警告Passing untrusted data to this parameter is insecure, unless imap.enable_insecure_rsh is disabled.
-
flags
-
flags
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. If this flag is set, the function behaves identically to imap_mail_move().
-
返回值
成功时返回 true
, 或者在失败时返回 false
。
更新日志
版本 | 说明 |
---|---|
8.1.0 |
现在 imap 参数接受 IMAP\Connection
实例,之前接受 资源(resource)。
|

User Contributed Notes 5 notes
marcus at names dot co dot uk ¶
19 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!!
jigar dot dhaduk79 at gmail dot com ¶
6 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);
Ben ¶
9 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
<?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.
hxlvt at hotmail dot com ¶
21 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.
richard dot oplustil at gmail dot com ¶
10 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.
备份地址:http://www.lvesu.com/blog/php/function.imap-mail-copy.php