Source for file Deliver_SendMail.class.php

Documentation is available at Deliver_SendMail.class.php

  1. <?php
  2.  
  3. /**
  4.  * Deliver_SendMail.class.php
  5.  *
  6.  * Delivery backend for the Deliver class.
  7.  *
  8.  * @author Marc Groot Koerkamp
  9.  * @copyright 1999-2014 The SquirrelMail Project Team
  10.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  11.  * @version $Id: Deliver_SendMail.class.php 14437 2014-01-21 22:15:03Z pdontthink $
  12.  * @package squirrelmail
  13.  */
  14.  
  15. /** @ignore */
  16. if (!defined('SM_PATH')) define('SM_PATH','../../');
  17.  
  18. /** This of course depends upon Deliver */
  19. require_once(SM_PATH 'class/deliver/Deliver.class.php');
  20.  
  21. /**
  22.  * Delivers messages using the sendmail binary
  23.  * @package squirrelmail
  24.  */
  25. class Deliver_SendMail extends Deliver {
  26.     /**
  27.      * Extra sendmail arguments
  28.      *
  29.      * Parameter can be set in class constructor function.
  30.      *
  31.      * WARNING: Introduction of this parameter broke backwards compatibility
  32.      * with workarounds specific to qmail-inject.
  33.      *
  34.      * If parameter needs some security modifications, it should be set to
  35.      * private in PHP 5+ in order to prevent uncontrolled access.
  36.      * @var string 
  37.      * @since 1.5.1
  38.      */
  39.     var $sendmail_args = '-i -t';
  40.  
  41.     /**
  42.      * Stores used sendmail command
  43.      * Private variable that is used to inform about used sendmail command.
  44.      * @var string 
  45.      * @since 1.5.1
  46.      */
  47.     var $sendmail_command = '';
  48.  
  49.     /**
  50.      * Constructor function
  51.      * @param array configuration options. array key = option name,
  52.      *  array value = option value.
  53.      * @return void 
  54.      * @since 1.5.1
  55.      */
  56.     function Deliver_SendMail($params=array()) {
  57.         if (!empty($params&& is_array($params)) {
  58.             // set extra sendmail arguments
  59.             if (isset($params['sendmail_args'])) {
  60.                 $this->sendmail_args = $params['sendmail_args'];
  61.             }
  62.         }
  63.     }
  64.  
  65.    /**
  66.     * function preWriteToStream
  67.     *
  68.     * Sendmail needs LF's as line endings instead of CRLF.
  69.     * This function translates the line endings to LF and should be called
  70.     * before each line is written to the stream.
  71.     *
  72.     * @param string $s Line to process
  73.     * @return void 
  74.     * @access private
  75.     */
  76.     function preWriteToStream(&$s{
  77.        if ($s{
  78.            $s str_replace("\r\n""\n"$s);
  79.        }
  80.     }
  81.  
  82.    /**
  83.     * function initStream
  84.     *
  85.     * Initialise the sendmail connection.
  86.     *
  87.     * @param Message $message Message object containing the from address
  88.     * @param string $sendmail_path Location of sendmail binary
  89.     * @param mixed $ignore Eight extra arguments that the parent class
  90.     *                       requires which are not used here
  91.     * @return resource 
  92.     * @access public
  93.     */
  94.     function initStream($message$sendmail_path$ignore=0$ignore=''$ignore=''$ignore=''$ignore=''$ignore=false$ignore=''$ignore=array()) {
  95.         $rfc822_header $message->rfc822_header;
  96.         $from $rfc822_header->from[0];
  97.         $envelopefrom trim($from->mailbox.'@'.$from->host);
  98.         $envelopefrom str_replace(array("\0","\n"),array('',''),$envelopefrom);
  99.         // save executed command for future reference
  100.         $this->sendmail_command = "$sendmail_path $this->sendmail_args -f$envelopefrom";
  101.         // open process handle for writing
  102.         $stream popen (escapeshellcmd($this->sendmail_command)"w");
  103.         return $stream;
  104.     }
  105.  
  106.    /**
  107.     * Closes process handle.
  108.     *
  109.     * @param resource $stream 
  110.     * @return boolean 
  111.     * @access public
  112.     */
  113.     function finalizeStream($stream{
  114.         $ret true;
  115.         $status pclose($stream);
  116.         // check pclose() status.
  117.         if ($status!=0{
  118.             $ret false;
  119.             $this->dlv_msg=_("Email delivery error");
  120.             $this->dlv_ret_nr=$status;
  121.             // we can get better error messsage only if we switch to php 4.3+ and proc_open().
  122.             $this->dlv_server_msg=sprintf(_("Can't execute command '%s'."),$this->sendmail_command);
  123.         }
  124.         return $ret;
  125.     }
  126.  
  127.    /**
  128.     * function getBcc
  129.     *
  130.     * In case of sendmail, the rfc822header must contain the bcc header.
  131.     *
  132.     * @return boolean true if rfc822header should include the bcc header.
  133.     * @access private
  134.     */
  135.     function getBcc({
  136.        return true;
  137.     }
  138.  
  139.    /**
  140.     * function clean_crlf
  141.     *
  142.     * Cleans each line to only end in a LF
  143.     * Returns the length of the line including a CR,
  144.     * so that length is correct when the message is saved to imap
  145.     * Implemented to fix sendmail->postfix rejection of messages with
  146.     * attachments because of stray LF's
  147.     *
  148.     * @param string $s string to strip of CR's
  149.     * @return integer length of string including a CR for each LF
  150.     * @access private
  151.     */
  152.     function clean_crlf(&$s{
  153.         $s str_replace("\r\n""\n"$s);
  154.         $s str_replace("\r""\n"$s);
  155.         $s2 str_replace("\n""\r\n"$s);
  156.         return strlen($s2);
  157.     }
  158.  
  159.  
  160. }

Documentation generated on Wed, 22 Oct 2014 04:17:43 +0200 by phpDocumentor 1.4.3