/** * delete all messages in one folder -> be careful, they are completly removed and not moved to trash * -> delete subfolders if param set * * @param string $_folderId * @param boolean $_deleteSubfolders * @return Felamimail_Model_Folder * @throws Felamimail_Exception_IMAPServiceUnavailable */ public function emptyFolder($_folderId, $_deleteSubfolders = FALSE) { $folder = $this->_backend->get($_folderId); $account = Felamimail_Controller_Account::getInstance()->get($folder->account_id); $imap = Felamimail_Backend_ImapFactory::factory($account); try { // try to delete messages in imap folder Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' Delete all messages in folder ' . $folder->globalname); $imap->emptyFolder(Felamimail_Model_Folder::encodeFolderName($folder->globalname)); } catch (Zend_Mail_Protocol_Exception $zmpe) { Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' ' . $zmpe->getMessage()); throw new Felamimail_Exception_IMAPServiceUnavailable($zmpe->getMessage()); } catch (Zend_Mail_Storage_Exception $zmse) { Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Folder could be empty (' . $zmse->getMessage() . ')'); } if ($_deleteSubfolders) { $this->deleteSubfolders($folder); } $folder = Felamimail_Controller_Cache_Message::getInstance()->clear($_folderId); return $folder; }
/** * get imap backend and folder (and select folder) * * @param string $_folderId * @param Felamimail_Backend_Folder &$_folder * @param boolean $_select * @param Felamimail_Backend_ImapProxy $_imapBackend * @throws Felamimail_Exception_IMAPServiceUnavailable * @throws Felamimail_Exception_IMAPFolderNotFound * @return Felamimail_Backend_ImapProxy */ protected function _getBackendAndSelectFolder($_folderId = NULL, &$_folder = NULL, $_select = TRUE, Felamimail_Backend_ImapProxy $_imapBackend = NULL) { if ($_folder === NULL || empty($_folder)) { $folderBackend = new Felamimail_Backend_Folder(); $_folder = $folderBackend->get($_folderId); } try { $imapBackend = $_imapBackend === NULL ? Felamimail_Backend_ImapFactory::factory($_folder->account_id) : $_imapBackend; if ($_select) { if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' Select folder ' . $_folder->globalname); } $imapBackend->selectFolder(Felamimail_Model_Folder::encodeFolderName($_folder->globalname)); } } catch (Zend_Mail_Storage_Exception $zmse) { // @todo remove the folder from cache if it could not be found on the IMAP server? throw new Felamimail_Exception_IMAPFolderNotFound($zmse->getMessage()); } catch (Zend_Mail_Protocol_Exception $zmpe) { throw new Felamimail_Exception_IMAPServiceUnavailable($zmpe->getMessage()); } return $imapBackend; }