<?php
/**
* This is the Sendmail handler for Swift Mailer, a PHP Mailer class.
*
* @package Swift
* @version >= 2.0.0
* @author Chris Corbyn
* @date 30th July 2006
* @license http://www.gnu.org/licenses/lgpl.txt Lesser GNU Public License
*
* @copyright Copyright © 2006 Chris Corbyn - All Rights Reserved.
* @filesource
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to
*
* The Free Software Foundation, Inc.,
* 51 Franklin Street,
* Fifth Floor,
* Boston,
* MA 02110-1301 USA
*
* "Chris Corbyn" <chris@w3style.co.uk>
*
*/
if (!defined('SWIFT_AUTO_DETECT')) define('SWIFT_AUTO_DETECT', -2);
/**
* Sendmail Connection Class.
* Connects to a local binary MTA and stores the connections internally
* @package Swift
*/
class Swift_Connection_Sendmail implements Swift_IConnection
{
/**
* Sendmail Command (full path and arguments)
* This can be a different MTA that behaves like sendmail
* Exim works here.
* @var string command
*/
public $command = "/usr/sbin/sendmail -bs";
/**
* Sendmail Process handle
* @var resource handle
*/
public $handle;
/**
* Process Pipes from proc_open()
* @var array pipes
*/
public $pipes;
/**
* MTA Read part of I/O for Swift
* @var resource socket (reference)
*/
public $readHook;
/**
* MTA Write part of I/O for Swift
* @var resource socket (reference)
*/
public $writeHook;
/**
* If the server is connected to the MTA.
* @var bool connected
*/
public $connected = false;
/**
* Constructor
* @param string Sendmail command, optional
*/
public function __construct($command=false)
{
if ($command == SWIFT_AUTO_DETECT) $command = @trim(`which sendmail`).' -bs';
if ($command) $this->command = $command;
}
/**
* Establishes a connection with the MTA
* The SwiftInstance Object calls this
*
* @return bool connected
*/
public function start()
{
return $this->initializeProcess();
}
/**
* Establishes a connection with the MTA
*
* @return bool connected
*/
public function initializeProcess()
{
$pipes_spec = array(
array("pipe", "r"),
array("pipe", "w"),
array("pipe", "w")
);
$this->handle = @proc_open($this->command, $pipes_spec, $this->pipes);
$this->writeHook =& $this->pipes[0];
$this->readHook =& $this->pipes[1];
if (!$this->handle) return $this->connected = false;
else return $this->connected = true;
}
/**
* Closes the connection with the MTA
* Called by the SwiftInstance object
*
* @return void
*/
public function stop()
{
$this->closeProcess();
}
/**
* Closes the connection with the MTA
*
* @return void
*/
protected function closeProcess()
{
foreach ($this->pipes as $pipe) fclose($pipe);
if ($this->handle && $this->connected)
{
proc_close($this->handle);
$this->writeHook = false;
$this->readHook = false;
$this->connected = false;
}
}
/**
* Returns TRUE if we're connected to the MTA
*/
public function isConnected()
{
return $this->connected;
}
}
?>