Viewing file: Smtp.php (5.91 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Mail * @subpackage Transport * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: Smtp.php 18989 2009-11-15 13:23:41Z yoshida@zend.co.jp $ */
/** * @see Zend_Mime */ require_once 'Zend/Mime.php';
/** * @see Zend_Mail_Protocol_Smtp */ require_once 'Zend/Mail/Protocol/Smtp.php';
/** * @see Zend_Mail_Transport_Abstract */ require_once 'Zend/Mail/Transport/Abstract.php';
/** * SMTP connection object * * Loads an instance of Zend_Mail_Protocol_Smtp and forwards smtp transactions * * @category Zend * @package Zend_Mail * @subpackage Transport * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_Mail_Transport_Smtp extends Zend_Mail_Transport_Abstract { /** * EOL character string used by transport * @var string * @access public */ public $EOL = "\n";
/** * Remote smtp hostname or i.p. * * @var string */ protected $_host;
/** * Port number * * @var integer|null */ protected $_port;
/** * Local client hostname or i.p. * * @var string */ protected $_name = 'localhost';
/** * Authentication type OPTIONAL * * @var string */ protected $_auth;
/** * Config options for authentication * * @var array */ protected $_config;
/** * Instance of Zend_Mail_Protocol_Smtp * * @var Zend_Mail_Protocol_Smtp */ protected $_connection;
/** * Constructor. * * @param string $host OPTIONAL (Default: 127.0.0.1) * @param array|null $config OPTIONAL (Default: null) * @return void */ public function __construct($host = '127.0.0.1', Array $config = array()) { if (isset($config['name'])) { $this->_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); } if (!class_exists($connectionClass)) { require_once 'Zend/Loader.php'; 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 sender email address $this->_connection->mail($this->_mail->getFrom());
// 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); } }
|