|
imap_mail_move
Move specified messages to a mailbox
(PHP 4, PHP 5)
Code Examples / Notes » imap_mail_movephp
To move mails via IMAP on an Exchange Server into "Gelöschte Objekte" use: imap_mail_move($mbox, $delmsg, "Gel&APY-schte Objekte"); It took me some tcpdumping to get this out, since both imap_utf7_encode and imap_utf8 did not translate it right. Guardn laurent dot penou
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 ! vlad php.net
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.
portico dot nospam
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.
matt
This function copies the mail and then marks the source as deleted. In order to see the changes, you must <PRE>imap_expunge</PRE> the source box.
dinter
I've used a dot in imap_mail_move($mbox,$movmsgid,'INBOX.send'); instead of INBOX/test and it work's fine. jim dot bodine
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 . " "; @imap_mail_move($this->mailInBox, $i, $move); } ?> juuuugroid
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! alex
After using imap_mail_move, imap_mail_copy or imap_delete it is necesary to call imap_expunge() function.
ian
<pre>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) if ($mbox_name != $newmbox_name) { reset($msg_no); $messageset = implode (",",$msg_no); imap_mail_move($mbox,$messageset,$newmbox_name); imap_expunge($mbox); } </pre> |
Change Languageimap_8bit imap_alerts imap_append imap_base64 imap_binary imap_body imap_bodystruct imap_check imap_clearflag_full imap_close imap_createmailbox imap_delete imap_deletemailbox imap_errors imap_expunge imap_fetch_overview imap_fetchbody imap_fetchheader imap_fetchstructure imap_get_quota imap_get_quotaroot imap_getacl imap_getmailboxes imap_getsubscribed imap_header imap_headerinfo imap_headers imap_last_error imap_list imap_listmailbox imap_listscan imap_listsubscribed imap_lsub imap_mail_compose imap_mail_copy imap_mail_move imap_mail imap_mailboxmsginfo imap_mime_header_decode imap_msgno imap_num_msg imap_num_recent imap_open imap_ping imap_qprint imap_renamemailbox imap_reopen imap_rfc822_parse_adrlist imap_rfc822_parse_headers imap_rfc822_write_address imap_savebody imap_scanmailbox imap_search imap_set_quota imap_setacl imap_setflag_full imap_sort imap_status imap_subscribe imap_thread imap_timeout imap_uid imap_undelete imap_unsubscribe imap_utf7_decode imap_utf7_encode imap_utf8 |