/** * 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) { $this->_has['flags'] = true; if ($params instanceof Zend_Mail_Protocol_Imap) { $this->_protocol = $params; try { $this->selectFolder('INBOX'); } catch (Zend_Mail_Storage_Exception $e) { throw new Zend_Mail_Storage_Exception('cannot select INBOX, is this a valid transport?'); } return; } if (!isset($params['user'])) { throw new Zend_Mail_Storage_Exception('need at least user in params'); } $params['host'] = isset($params['host']) ? $params['host'] : 'localhost'; $params['password'] = isset($params['password']) ? $params['password'] : ''; $params['port'] = isset($params['port']) ? $params['port'] : null; $params['ssl'] = isset($params['ssl']) ? $params['ssl'] : false; $this->_protocol = new Zend_Mail_Protocol_Imap(); $this->_protocol->connect($params['host'], $params['port'], $params['ssl']); if (!$this->_protocol->login($params['user'], $params['password'])) { throw new Zend_Mail_Storage_Exception('cannot login, user or password wrong'); } $this->selectFolder(isset($params['folder']) ? $params['folder'] : 'INBOX'); }
/** * 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) { throw new Zend_Mail_Storage_Exception('cannot select INBOX, is this a valid transport?'); } return; } if (!isset($params->user)) { 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)) { throw new Zend_Mail_Storage_Exception('cannot login, user or password wrong'); } $this->selectFolder(isset($params->folder) ? $params->folder : 'INBOX'); }
/** * 检查未读邮件 */ public function checkAction() { //$address = $this->_request->getQuery('address'); $emails = $this->_daoEmail->getEmails(array('orgid' => $this->_user->orgId, 'userid' => $this->_user->userId)); $result = array(); foreach ($emails as $email) { if (null != $email && $email->protocol == 'imap' && $email->host) { $port = $email->port ? $email->port : ($email->isSsl ? 993 : 143); $imap = new Zend_Mail_Protocol_Imap(); try { $connect = $imap->connect($email->host, $port, $email->isSsl); } catch (Zend_Mail_Protocol_Exception $e) { continue; } $login = $imap->login($email->address, $email->password); // 登录邮箱 if (!$login) { $result[$email->address] = array('msg' => sprintf($this->lang['mailbox_login_failure'], $email->address, $email->address)); continue; } // 打开INBOX $ret = $imap->examineOrSelect(); if (false !== $ret && isset($ret['recent'])) { $email->unreadNum = (int) $ret['recent']; // 查找新邮件 /*$records = $imap->search('RECENT'); if (false !== $records) { }*/ $result[$email->address] = array('recent' => $email->unreadNum); $this->_daoEmail->updateEmail($email->orgId, $email->userId, $email->address, array('lastcheckinfo' => implode("\n", array($email->unreadNum, $email->lastMailId, $email->lastMailSubject, $email->lastMailFrom)), 'lastchecktime' => time())); } $imap->logout(); } } $this->json(true, null, $result); }