| | |
| | | /** |
| | | * Executes EXPUNGE command |
| | | * |
| | | * @param string $mailbox Mailbox name |
| | | * @param string $messages Message UIDs to expunge |
| | | * @param string $mailbox Mailbox name |
| | | * @param string|array $messages Message UIDs to expunge |
| | | * |
| | | * @return boolean True on success, False on error |
| | | */ |
| | |
| | | // Clear internal status cache |
| | | unset($this->data['STATUS:'.$mailbox]); |
| | | |
| | | if ($messages) |
| | | $result = $this->execute('UID EXPUNGE', array($messages), self::COMMAND_NORESPONSE); |
| | | else |
| | | if (!empty($messages) && $messages != '*' && $this->hasCapability('UIDPLUS')) { |
| | | $messages = self::compressMessageSet($messages); |
| | | $result = $this->execute('UID EXPUNGE', array($messages), self::COMMAND_NORESPONSE); |
| | | } |
| | | else { |
| | | $result = $this->execute('EXPUNGE', null, self::COMMAND_NORESPONSE); |
| | | } |
| | | |
| | | if ($result == self::ERROR_OK) { |
| | | $this->selected = null; // state has changed, need to reselect |
| | |
| | | |
| | | /** |
| | | * Moves message(s) from one folder to another. |
| | | * Original message(s) will be marked as deleted. |
| | | * |
| | | * @param string|array $messages Message UID(s) |
| | | * @param string $from Mailbox name |
| | |
| | | return false; |
| | | } |
| | | |
| | | $r = $this->copy($messages, $from, $to); |
| | | // use MOVE command (RFC 6851) |
| | | if ($this->hasCapability('MOVE')) { |
| | | // Clear last COPYUID data |
| | | unset($this->data['COPYUID']); |
| | | |
| | | if ($r) { |
| | | // Clear internal status cache |
| | | unset($this->data['STATUS:'.$to]); |
| | | unset($this->data['STATUS:'.$from]); |
| | | |
| | | return $this->flag($from, $messages, 'DELETED'); |
| | | $r = $this->execute('UID MOVE', array( |
| | | $this->compressMessageSet($messages), $this->escape($to)), |
| | | self::COMMAND_NORESPONSE); |
| | | } |
| | | // use COPY + STORE +FLAGS.SILENT \Deleted + EXPUNGE |
| | | else { |
| | | $r = $this->copy($messages, $from, $to); |
| | | |
| | | if ($r) { |
| | | // Clear internal status cache |
| | | unset($this->data['STATUS:'.$from]); |
| | | |
| | | $r = $this->flag($from, $messages, 'DELETED'); |
| | | |
| | | if ($messages == '*') { |
| | | // CLOSE+SELECT should be faster than EXPUNGE |
| | | $this->close(); |
| | | } |
| | | else { |
| | | $this->expunge($from, $messages); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return $r; |
| | | } |
| | | |
| | |
| | | // if less than 255 bytes long, let's not bother |
| | | if (!$force && strlen($messages)<255) { |
| | | return $messages; |
| | | } |
| | | } |
| | | |
| | | // see if it's already been compressed |
| | | if (strpos($messages, ':') !== false) { |