/** * Set message flag to one or several messages * * @param mixed $uids Message UIDs as array or comma-separated string, or '*' * @param string $flag Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT * @param string $mbox_name Folder name * @param boolean $skip_cache True to skip message cache clean up * @return boolean Operation status */ function set_flag($uids, $flag, $mbox_name = NULL, $skip_cache = false) { $mailbox = strlen($mbox_name) ? $this->mod_mailbox($mbox_name) : $this->mailbox; $flag = strtoupper($flag); list($uids, $all_mode) = $this->_parse_uids($uids, $mailbox); if (strpos($flag, 'UN') === 0) { $result = $this->conn->unflag($mailbox, $uids, substr($flag, 2)); } else { $result = $this->conn->flag($mailbox, $uids, $flag); } if ($result) { // reload message headers if cached if ($this->caching_enabled && !$skip_cache) { $cache_key = $mailbox . '.msg'; if ($all_mode) { $this->clear_message_cache($cache_key); } else { $this->remove_message_cache($cache_key, explode(',', $uids)); } } // clear cached counters if ($flag == 'SEEN' || $flag == 'UNSEEN') { $this->_clear_messagecount($mailbox, 'SEEN'); $this->_clear_messagecount($mailbox, 'UNSEEN'); } else { if ($flag == 'DELETED') { $this->_clear_messagecount($mailbox, 'DELETED'); } } } return $result; }
/** * Set message flag to one or several messages * * @param mixed $uids Message UIDs as array or comma-separated string, or '*' * @param string $flag Flag to set: SEEN, UNDELETED, DELETED, RECENT, ANSWERED, DRAFT, MDNSENT * @param string $mailbox Folder name * @param boolean $skip_cache True to skip message cache clean up * * @return boolean Operation status */ function set_flag($uids, $flag, $mailbox = null, $skip_cache = false) { if (!strlen($mailbox)) { $mailbox = $this->mailbox; } $flag = strtoupper($flag); list($uids, $all_mode) = $this->_parse_uids($uids, $mailbox); if (strpos($flag, 'UN') === 0) { $result = $this->conn->unflag($mailbox, $uids, substr($flag, 2)); } else { $result = $this->conn->flag($mailbox, $uids, $flag); } if ($result) { // reload message headers if cached // @TODO: update flags instead removing from cache if (!$skip_cache && ($mcache = $this->get_mcache_engine())) { $status = strpos($flag, 'UN') !== 0; $mflag = preg_replace('/^UN/', '', $flag); $mcache->change_flag($mailbox, $all_mode ? null : explode(',', $uids), $mflag, $status); } // clear cached counters if ($flag == 'SEEN' || $flag == 'UNSEEN') { $this->_clear_messagecount($mailbox, 'SEEN'); $this->_clear_messagecount($mailbox, 'UNSEEN'); } else { if ($flag == 'DELETED') { $this->_clear_messagecount($mailbox, 'DELETED'); } } } return $result; }
/** * Mark messages as deleted and expunge them * * @param mixed $uids Message UIDs as array or comma-separated string, or '*' * @param string $folder Source folder * * @return boolean True on success, False on error */ public function delete_message($uids, $folder='') { if (!strlen($folder)) { $folder = $this->folder; } list($uids, $all_mode) = $this->parse_uids($uids); // exit if no message uids are specified if (empty($uids)) { return false; } if (!$this->check_connection()) { return false; } $deleted = $this->conn->flag($folder, $uids, 'DELETED'); if ($deleted) { // send expunge command in order to have the deleted message // really deleted from the folder $this->expunge_message($uids, $folder, false); $this->clear_messagecount($folder); unset($this->uid_id_map[$folder]); // unset threads internal cache unset($this->icache['threads']); // remove message ids from search set if ($this->search_set && $folder == $this->folder) { // threads are too complicated to just remove messages from set if ($this->search_threads || $all_mode) { $this->refresh_search(); } else { $this->search_set->filter(explode(',', $uids)); } } // remove cached messages $this->clear_message_cache($folder, $all_mode ? null : explode(',', $uids)); } return $deleted; }