?? imap.php
字號:
<?php/** * Zend Framework * * LICENSE * * This source file is subject to version 1.0 of the Zend Framework * license, that is bundled with this package in the file LICENSE.txt, and * is available through the world-wide-web at the following URL: * http://framework.zend.com/license/new-bsd. If you did not receive * a copy of the Zend Framework license and are unable to obtain it * through the world-wide-web, please send a note to license@zend.com * so we can mail you a copy immediately. * * @category Zend * @package Zend_Mail * @subpackage Storage * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: Imap.php 8928 2008-03-20 19:41:41Z thomas $ *//** * @see Zend_Mail_Storage_Abstract */require_once 'Zend/Mail/Storage/Abstract.php';/** * @see Zend_Mail_Protocol_Imap */require_once 'Zend/Mail/Protocol/Imap.php';/** * @see Zend_Mail_Storage_Writable_Interface */require_once 'Zend/Mail/Storage/Writable/Interface.php';/** * @see Zend_Mail_Storage_Folder_Interface */require_once 'Zend/Mail/Storage/Folder/Interface.php';/** * @see Zend_Mail_Storage_Folder */require_once 'Zend/Mail/Storage/Folder.php';/** * @see Zend_Mail_Message */require_once 'Zend/Mail/Message.php';/** * @see Zend_Mail_Storage */require_once 'Zend/Mail/Storage.php';/** * @category Zend * @package Zend_Mail * @subpackage Storage * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */class Zend_Mail_Storage_Imap extends Zend_Mail_Storage_Abstract implements Zend_Mail_Storage_Folder_Interface, Zend_Mail_Storage_Writable_Interface{ // TODO: with an internal cache we could optimize this class, or create an extra class with // such optimizations. Especially the various fetch calls could be combined to one cache call /** * protocol handler * @var null|Zend_Mail_Protocol_Imap */ protected $_protocol; /** * name of current folder * @var string */ protected $_currentFolder = ''; /** * imap flags to constants translation * @var array */ protected static $_knownFlags = array('\Passed' => Zend_Mail_Storage::FLAG_PASSED, '\Answered' => Zend_Mail_Storage::FLAG_ANSWERED, '\Seen' => Zend_Mail_Storage::FLAG_SEEN, '\Deleted' => Zend_Mail_Storage::FLAG_DELETED, '\Draft' => Zend_Mail_Storage::FLAG_DRAFT, '\Flagged' => Zend_Mail_Storage::FLAG_FLAGGED); /** * Count messages all messages in current box * * @return int number of messages * @throws Zend_Mail_Storage_Exception * @throws Zend_Mail_Protocol_Exception */ public function countMessages() { if (!$this->_currentFolder) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('No selected folder to count'); } // we're reselecting the current mailbox, because STATUS is slow and shouldn't be used on the current mailbox $result = $this->_protocol->select($this->_currentFolder); return $result['exists']; } /** * get a list of messages with number and size * * @param int $id number of message * @return int|array size of given message of list with all messages as array(num => size) * @throws Zend_Mail_Protocol_Exception */ public function getSize($id = 0) { if ($id) { return $this->_protocol->fetch('RFC822.SIZE', $id); } return $this->_protocol->fetch('RFC822.SIZE', 1, INF); } /** * Fetch a message * * @param int $id number of message * @return Zend_Mail_Message * @throws Zend_Mail_Protocol_Exception */ public function getMessage($id) { $data = $this->_protocol->fetch(array('FLAGS', 'RFC822.HEADER'), $id); $header = $data['RFC822.HEADER']; $flags = array(); foreach ($data['FLAGS'] as $flag) { $flags[] = isset(self::$_knownFlags[$flag]) ? self::$_knownFlags[$flag] : $flag; } return new $this->_messageClass(array('handler' => $this, 'id' => $id, 'headers' => $header, 'flags' => $flags)); } /* * Get raw header of message or part * * @param int $id number of message * @param null|array|string $part path to part or null for messsage header * @param int $topLines include this many lines with header (after an empty line) * @param int $topLines include this many lines with header (after an empty line) * @return string raw header * @throws Zend_Mail_Protocol_Exception * @throws Zend_Mail_Storage_Exception */ public function getRawHeader($id, $part = null, $topLines = 0) { if ($part !== null) { // TODO: implement /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('not implemented'); } // TODO: toplines return $this->_protocol->fetch('RFC822.HEADER', $id); } /* * Get raw content of message or part * * @param int $id number of message * @param null|array|string $part path to part or null for messsage content * @return string raw content * @throws Zend_Mail_Protocol_Exception * @throws Zend_Mail_Storage_Exception */ public function getRawContent($id, $part = null) { if ($part !== null) { // TODO: implement /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('not implemented'); } return $this->_protocol->fetch('RFC822.TEXT', $id); } /** * create instance with parameters * Supported paramters are * - user username * - host hostname or ip address of IMAP server [optional, default = 'localhost'] * - password password for user 'username' [optional, default = ''] * - port port for IMAP server [optional, default = 110] * - ssl 'SSL' or 'TLS' for secure sockets * - folder select this folder [optional, default = 'INBOX'] * * @param array $params mail reader specific parameters * @throws Zend_Mail_Storage_Exception * @throws Zend_Mail_Protocol_Exception */ public function __construct($params) { if (is_array($params)) { $params = (object)$params; } $this->_has['flags'] = true; if ($params instanceof Zend_Mail_Protocol_Imap) { $this->_protocol = $params; try { $this->selectFolder('INBOX'); } catch(Zend_Mail_Storage_Exception $e) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot select INBOX, is this a valid transport?'); } return; } if (!isset($params->user)) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('need at least user in params'); } $host = isset($params->host) ? $params->host : 'localhost'; $password = isset($params->password) ? $params->password : ''; $port = isset($params->port) ? $params->port : null; $ssl = isset($params->ssl) ? $params->ssl : false; $this->_protocol = new Zend_Mail_Protocol_Imap(); $this->_protocol->connect($host, $port, $ssl); if (!$this->_protocol->login($params->user, $password)) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('cannot login, user or password wrong'); } $this->selectFolder(isset($params->folder) ? $params->folder : 'INBOX'); } /** * Close resource for mail lib. If you need to control, when the resource * is closed. Otherwise the destructor would call this. * * @return null */ public function close() { $this->_currentFolder = ''; $this->_protocol->logout(); } /** * Keep the server busy. * * @return null * @throws Zend_Mail_Storage_Exception */ public function noop() { if (!$this->_protocol->noop()) { /** * @see Zend_Mail_Storage_Exception */ require_once 'Zend/Mail/Storage/Exception.php'; throw new Zend_Mail_Storage_Exception('could not do nothing'); } } /** * Remove a message from server. If you're doing that from a web enviroment * you should be careful and use a uniqueid as parameter if possible to * identify the message. * * @param int $id number of message * @return null * @throws Zend_Mail_Storage_Exception */ public function removeMessage($id) { if (!$this->_protocol->store(array(Zend_Mail_Storage::FLAG_DELETED), $id, null, '+')) { /** * @see Zend_Mail_Storage_Exception */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -