📄 imap.php
字号:
require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot set deleted flag'); } // TODO: expunge here or at close? we can handle an error here better and are more fail safe if (!$this->_protocol->expunge()) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('message marked as deleted, but could not expunge'); } } /** * get unique id for one or all messages * * if storage does not support unique ids it's the same as the message number * * @param int|null $id message number * @return array|string message number for given message or all messages as array * @throws Zend_Mail_Storage_Exception */ public function getUniqueId($id = null) { if ($id) { return $this->_protocol->fetch('UID', $id); } return $this->_protocol->fetch('UID', 1, INF); } /** * get a message number from a unique id * * I.e. if you have a webmailer that supports deleting messages you should use unique ids * as parameter and use this method to translate it to message number right before calling removeMessage() * * @param string $id unique id * @return int message number * @throws Zend_Mail_Storage_Exception */ public function getNumberByUniqueId($id) { // TODO: use search to find number directly $ids = $this->getUniqueId(); foreach ($ids as $k => $v) { if ($v == $id) { return $k; } } /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('unique id not found'); } /** * get root folder or given folder * * @param string $rootFolder get folder structure for given folder, else root * @return Zend_Mail_Storage_Folder root or wanted folder * @throws Zend_Mail_Storage_Exception * @throws Zend_Mail_Protocol_Exception */ public function getFolders($rootFolder = null) { $folders = $this->_protocol->listMailbox((string)$rootFolder); if (!$folders) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('folder not found'); } ksort($folders, SORT_STRING); $root = new Zend_Mail_Storage_Folder('/', '/', false); $stack = array(null); $folderStack = array(null); $parentFolder = $root; $parent = ''; foreach ($folders as $globalName => $data) { do { if (!$parent || strpos($globalName, $parent) === 0) { $pos = strrpos($globalName, $data['delim']); if ($pos === false) { $localName = $globalName; } else { $localName = substr($globalName, $pos + 1); } $selectable = !$data['flags'] || !in_array('\\Noselect', $data['flags']); array_push($stack, $parent); $parent = $globalName . $data['delim']; $folder = new Zend_Mail_Storage_Folder($localName, $globalName, $selectable); $parentFolder->$localName = $folder; array_push($folderStack, $parentFolder); $parentFolder = $folder; break; } else if ($stack) { $parent = array_pop($stack); $parentFolder = array_pop($folderStack); } } while ($stack); if (!$stack) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('error while constructing folder tree'); } } return $root; } /** * select given folder * * folder must be selectable! * * @param Zend_Mail_Storage_Folder|string $globalName global name of folder or instance for subfolder * @return null * @throws Zend_Mail_Storage_Exception * @throws Zend_Mail_Protocol_Exception */ public function selectFolder($globalName) { $this->_currentFolder = $globalName; if (!$this->_protocol->select($this->_currentFolder)) { $this->_currentFolder = ''; /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot change folder, maybe it does not exist'); } } /** * get Zend_Mail_Storage_Folder instance for current folder * * @return Zend_Mail_Storage_Folder instance of current folder * @throws Zend_Mail_Storage_Exception */ public function getCurrentFolder() { return $this->_currentFolder; } /** * create a new folder * * This method also creates parent folders if necessary. Some mail storages may restrict, which folder * may be used as parent or which chars may be used in the folder name * * @param string $name global name of folder, local name if $parentFolder is set * @param string|Zend_Mail_Storage_Folder $parentFolder parent folder for new folder, else root folder is parent * @return null * @throws Zend_Mail_Storage_Exception */ public function createFolder($name, $parentFolder = null) { // TODO: we assume / as the hierarchy delim - need to get that from the folder class! if ($parentFolder instanceof Zend_Mail_Storage_Folder) { $folder = $parentFolder->getGlobalName() . '/' . $name; } else if ($parentFolder != null) { $folder = $parentFolder . '/' . $name; } else { $folder = $name; } if (!$this->_protocol->create($folder)) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot create folder'); } } /** * remove a folder * * @param string|Zend_Mail_Storage_Folder $name name or instance of folder * @return null * @throws Zend_Mail_Storage_Exception */ public function removeFolder($name) { if ($name instanceof Zend_Mail_Storage_Folder) { $name = $name->getGlobalName(); } if (!$this->_protocol->delete($name)) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot delete folder'); } } /** * rename and/or move folder * * The new name has the same restrictions as in createFolder() * * @param string|Zend_Mail_Storage_Folder $oldName name or instance of folder * @param string $newName new global name of folder * @return null * @throws Zend_Mail_Storage_Exception */ public function renameFolder($oldName, $newName) { if ($oldName instanceof Zend_Mail_Storage_Folder) { $oldName = $oldName->getGlobalName(); } if (!$this->_protocol->rename($oldName, $newName)) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot rename folder'); } } /** * append a new message to mail storage * * @param string $message message as string or instance of message class * @param null|string|Zend_Mail_Storage_Folder $folder folder for new message, else current folder is taken * @param null|array $flags set flags for new message, else a default set is used * @throws Zend_Mail_Storage_Exception */ // not yet * @param string|Zend_Mail_Message|Zend_Mime_Message $message message as string or instance of message class public function appendMessage($message, $folder = null, $flags = null) { if ($folder === null) { $folder = $this->_currentFolder; } if ($flags === null) { $flags = array(Zend_Mail_Storage::FLAG_SEEN); } // TODO: handle class instances for $message if (!$this->_protocol->append($folder, $message, $flags)) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot create message, please check if the folder exists and your flags'); } } /** * copy an existing message * * @param int $id number of message * @param string|Zend_Mail_Storage_Folder $folder name or instance of targer folder * @return null * @throws Zend_Mail_Storage_Exception */ public function copyMessage($id, $folder) { if (!$this->_protocol->copy($folder, $id)) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot copy message, does the folder exist?'); } } /** * set flags for message * * NOTE: this method can't set the recent flag. * * @param int $id number of message * @param array $flags new flags for message * @throws Zend_Mail_Storage_Exception */ public function setFlags($id, $flags) { if (!$this->_protocol->store($flags, $id)) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot set flags, have you tried to set the recent flag or special chars?'); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -