getMail(); } /** * * @return Zend_Mail_Transport_Abstract|null */ public function getMail() { if (null === $this->_transport) { $options = $this->getOptions(); foreach($options as $key => $option) { $options[strtolower($key)] = $option; } $this->setOptions($options); if(isset($options['transport']) && !is_numeric($options['transport'])) { $this->_transport = $this->_setupTransport($options['transport']); if(!isset($options['transport']['register']) || $options['transport']['register'] == '1' || (isset($options['transport']['register']) && !is_numeric($options['transport']['register']) && (bool) $options['transport']['register'] == true)) { Zend_Mail::setDefaultTransport($this->_transport); } } $this->_setDefaults('from'); $this->_setDefaults('replyTo'); } return $this->_transport; } protected function _setDefaults($type) { $key = strtolower('default' . $type); $options = $this->getOptions(); if(isset($options[$key]['email']) && !is_numeric($options[$key]['email'])) { $method = array('Zend_Mail', 'setDefault' . ucfirst($type)); if(isset($options[$key]['name']) && !is_numeric($options[$key]['name'])) { call_user_func($method, $options[$key]['email'], $options[$key]['name']); } else { call_user_func($method, $options[$key]['email']); } } } protected function _setupTransport($options) { if(!isset($options['type'])) { $options['type'] = 'sendmail'; } $transportName = $options['type']; if(!Zend_Loader_Autoloader::autoload($transportName)) { $transportName = ucfirst(strtolower($transportName)); if(!Zend_Loader_Autoloader::autoload($transportName)) { $transportName = 'Zend_Mail_Transport_' . $transportName; if(!Zend_Loader_Autoloader::autoload($transportName)) { throw new Zend_Application_Resource_Exception( "Specified Mail Transport '{$transportName}'" . 'could not be found' ); } } } unset($options['type']); unset($options['register']); //@see ZF-11022 switch($transportName) { case 'Zend_Mail_Transport_Smtp': if(!isset($options['host'])) { throw new Zend_Application_Resource_Exception( 'A host is necessary for smtp transport,' .' but none was given'); } $transport = new $transportName($options['host'], $options); break; case 'Zend_Mail_Transport_Sendmail': default: $transport = new $transportName($options); break; } return $transport; } }