文字

imap_mail_move

(PHP 4, PHP 5, PHP 7)

imap_mail_moveMove specified messages to a mailbox

说明

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

Moves mail messages specified by msglist to the 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 and may contain the single option:

  • CP_UID - the sequence numbers contain UIDS

返回值

成功时返回 TRUE , 或者在失败时返回 FALSE

注释

Note:

imap_mail_move() will flag the original mail with a delete flag, to successfully delete it a call to the imap_expunge() function must be made.

参见

  • imap_mail_copy() - Copy specified messages to a mailbox

用户评论:

[#1] ThEDocTor [2011-02-01 22:15:36]

To copy/move a mail in Gmail to a particular Folder like Starred/Spam/Drafts/Trash

use the following statement and don't forget to call CL_EXPUNGE or imap_expunge($mbox) after it.

<?php
imap_mail_copy
($mbox,'16','[Gmail]/Starred'); // 16 is the message number, which can also be a range.(ex: '1:15')

imap_close($mbox,CL_EXPUNGE);
?>


Incase u want to send it to a personally created Label/folder(ex: Test) use..

<?php 
imap_mail_copy
($mbox,'16','Test');
imap_expunge($mbox);
imap_close($mbox);
?>

[#2] jim dot bodine at comcast dot net [2007-07-04 22:49:25]

I offer the following example because it took me HOURS to figure this out

<?php
$this
->mailInBox imap_open($this->mailConnectString."INBOX"$this->accountLogin$this->accountPassword);

            
$this->messageCount imap_num_msg($this->mailInBox);
            echo 
"Processing " $this->messageCount " messages:<Br>";
            for (
$i 1$i <= $this->messageCount; ++$i) {
                
$header imap_header($this->mailInBox$i);
                                
                
$prettydate date("jS F Y"$header->udate);
                
$fromHost $header->from[0]->host;
                
                if (isset(
$header->from[0]->personal)) {
                    
$personal $header->from[0]->personal;
                } else {
                    
$personal $header->from[0]->mailbox;
                }
                
                
$body imap_fetchbody($this->mailInBox$i"1.1");
                if (
$body == "") {
                   
$body imap_fetchbody($this->mailInBox$i"1");
                }

                    
$move "INBOX.processed" date("Ymd");
                    echo 
"trying to move:" $i "<br>";
                    @
imap_mail_move($this->mailInBox$i$move); 
                                        
                }

?>

[#3] alex at bestgames dot ro [2005-11-21 01:36:14]

After using imap_mail_move, imap_mail_copy or imap_delete it is necesary to call imap_expunge() function.

[#4] php at guardn dot de [2003-07-09 09:06:49]

[#5] dinter at gmx dot de [2003-01-27 10:18:31]

I've used a dot in
imap_mail_move($mbox,$movmsgid,'INBOX.send');
instead of
INBOX/test
and it work's fine.

[#6] vlad (php.net) [2002-11-04 13:37:35]

This keeps biting me time after time. A lot of IMAP servers with quotas don't implement 'move' right - they do a 'copy&delete' instead and don't recognize that this conflicts with their quota implementetions. So, if you try to move a large message, you'll exceed your quota even though moving it does not increase the total size of your mailbox. This is not PHP-specific, but I bet it'll bite someone else besides me, so here you go.

[#7] juuuugroid at yahoo dot com [2002-07-17 02:28:48]

I had the most trouble with figureing out what the message list was supposed to be.  There was one comment by jan@showstar.com but i was still terribly confused.  So I searched and searched and searched.  I read rfc2060 over 10 times.  Then BAM!  My brother found it here:

http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2060.html#sec-6.4.7

Here is the importand stuff. 

Another important field is the SEQUENCE, which identifies a set of messages by consecutive numbers from 1 to n where n is the number of messages in the mailbox.  A sequence may consist of a single number, a pair of numbers delimited by colon (equivalent to all numbers between those two numbers), or a list of single numbers or number pairs.  For example, the sequence 2,4:7,9,12:15 is equivalent to
   2,4,5,6,7,9,12,13,14,15 and identifies all those messages.

There is what I know about it.  BAM!

[#8] laurent dot penou at gadz dot org [2001-08-17 12:28:42]

to complete the previous example, if the mbox/folders names are
{imap.free.fr}INBOX
{imap.free.fr}INBOX/draft
{imap.free.fr}INBOX/test

and you want to copy/move from INBOX to INBOX/test this is the syntax:

$mbox = imap_open("{imap.free.fr}INBOX",$mailuser,$mailpass)
      or die("can't connect: ".imap_last_error());
...
imap_mail_move($mbox,$messageset,"INBOX/test"); 

Hope this could help !

[#9] ian at showstar dot com [2000-01-20 18:41:08]

The syntax for the message list is defined in RFC2060
It is a string, containing a list of message numbers and ranges, separated by commas (no spaces anywhere.) For example, "1,2,5,11:15,19" would be accepted by imap_mail_copy or imap_mail_move.
A range of messages is defined as two message numbers separated by a colon (Ex. "1:10".) Also, a "*" may be used to refer to the last message in a mailbox. (Ex. "1:*" refers to all messages)
Be careful not to use the same mailbox for source and destination, especially if you expunge the mailbox immediately afterwards; the message will be copied (back over itself), flagged as deleted (by the imap_mail_move function), and then expunged.

The following code will move the messages in the $msg_no[] array from the folder in $mbox_name to the folder in $newmbox_name: ($mbox is an already-opened imap stream)

<?php
if ($mbox_name != $newmbox_name) {
  
reset($msg_no);
  
$messageset implode (",",$msg_no);
  
imap_mail_move($mbox,$messageset,$newmbox_name);
  
imap_expunge($mbox);
}
?>

[#10] portico dot nospam at neverwas dot net [2000-01-11 03:17:40]

This function works, just not like everything else IMAP in PHP3... rather than feeding the server {server.ext/type:port}folder just feed it the folder's name.

[#11] matt at bonneau dot net [1999-12-20 15:49:30]

This function copies the mail and then marks the source as deleted.  In order to see the changes, you must imap_expunge the source box.

上一篇: 下一篇: