_name = $config['name']; } if (isset($config['port'])) { $this->_port = $config['port']; } if (isset($config['auth'])) { $this->_auth = $config['auth']; } $this->_host = $host; $this->_config = $config; } /** * Class destructor to ensure all open connections are closed * * @return void */ public function __destruct() { if ($this->_connection instanceof Zend_Mail_Protocol_Smtp) { try { $this->_connection->quit(); } catch (Zend_Mail_Protocol_Exception $e) { // ignore } $this->_connection->disconnect(); } } /** * Sets the connection protocol instance * * @param Zend_Mail_Protocol_Abstract $client * * @return void */ public function setConnection(Zend_Mail_Protocol_Abstract $connection) { $this->_connection = $connection; } /** * Gets the connection protocol instance * * @return Zend_Mail_Protocol|null */ public function getConnection() { return $this->_connection; } /** * Send an email via the SMTP connection protocol * * The connection via the protocol adapter is made just-in-time to allow a * developer to add a custom adapter if required before mail is sent. * * @return void */ public function _sendMail() { // If sending multiple messages per session use existing adapter if (!($this->_connection instanceof Zend_Mail_Protocol_Smtp)) { // Check if authentication is required and determine required class $connectionClass = 'Zend_Mail_Protocol_Smtp'; if ($this->_auth) { $connectionClass .= '_Auth_' . ucwords($this->_auth); } Zend_Loader::loadClass($connectionClass); $this->setConnection(new $connectionClass($this->_host, $this->_port, $this->_config)); $this->_connection->connect(); $this->_connection->helo($this->_name); } else { // Reset connection to ensure reliable transaction $this->_connection->rset(); } // Set mail return path from sender email address $this->_connection->mail($this->_mail->getReturnPath()); // Set recipient forward paths foreach ($this->_mail->getRecipients() as $recipient) { $this->_connection->rcpt($recipient); } // Issue DATA command to client $this->_connection->data($this->header . Zend_Mime::LINEEND . $this->body); } /** * Format and fix headers * * Some SMTP servers do not strip BCC headers. Most clients do it themselves as do we. * * @access protected * @param array $headers * @return void * @throws Zend_Transport_Exception */ protected function _prepareHeaders($headers) { if (!$this->_mail) { /** * @see Zend_Mail_Transport_Exception */ require_once 'Zend/Mail/Transport/Exception.php'; throw new Zend_Mail_Transport_Exception('_prepareHeaders requires a registered Zend_Mail object'); } unset($headers['Bcc']); // Prepare headers parent::_prepareHeaders($headers); } }