• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • imap_mail_copy()

    (PHP 4, PHP 5, PHP 7)

    Copy specified messages to a mailbox

    说明

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

    Copies mail messages specified by$msglistto specified mailbox.

    参数

    $imap_stream

    由imap_open()返回的 IMAP 流。

    $msglist

    $msglistis a range not just message numbers(as described in » RFC2060).

    $mailbox

    The mailbox name, see imap_open() for more information

    Warning

    Passing untrusted data to this parameter isinsecure, unlessimap.enable_insecure_rsh is disabled.

    $options

    $optionsis 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

    参见

    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!!
    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 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.