[ Index ]
 

Code source de GeekLog 1.4.1

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/system/pear/Mail/ -> sendmail.php (source)

   1  <?php
   2  //
   3  // +----------------------------------------------------------------------+
   4  // | PHP Version 4                                                        |
   5  // +----------------------------------------------------------------------+
   6  // | Copyright (c) 1997-2003 The PHP Group                                |
   7  // +----------------------------------------------------------------------+
   8  // | This source file is subject to version 2.02 of the PHP license,      |
   9  // | that is bundled with this package in the file LICENSE, and is        |
  10  // | available at through the world-wide-web at                           |
  11  // | http://www.php.net/license/2_02.txt.                                 |
  12  // | If you did not receive a copy of the PHP license and are unable to   |
  13  // | obtain it through the world-wide-web, please send a note to          |
  14  // | license@php.net so we can mail you a copy immediately.               |
  15  // +----------------------------------------------------------------------+
  16  // | Author: Chuck Hagenbuch <chuck@horde.org>                            |
  17  // +----------------------------------------------------------------------+
  18  
  19  /**
  20   * Sendmail implementation of the PEAR Mail:: interface.
  21   * @access public
  22   * @package Mail
  23   * @version $Revision: 1.17 $
  24   */
  25  class Mail_sendmail extends Mail {
  26  
  27      /**
  28       * The location of the sendmail or sendmail wrapper binary on the
  29       * filesystem.
  30       * @var string
  31       */
  32      var $sendmail_path = '/usr/sbin/sendmail';
  33  
  34      /**
  35       * Any extra command-line parameters to pass to the sendmail or
  36       * sendmail wrapper binary.
  37       * @var string
  38       */
  39      var $sendmail_args = '-i';
  40  
  41      /**
  42       * Constructor.
  43       *
  44       * Instantiates a new Mail_sendmail:: object based on the parameters
  45       * passed in. It looks for the following parameters:
  46       *     sendmail_path    The location of the sendmail binary on the
  47       *                      filesystem. Defaults to '/usr/sbin/sendmail'.
  48       *
  49       *     sendmail_args    Any extra parameters to pass to the sendmail
  50       *                      or sendmail wrapper binary.
  51       *
  52       * If a parameter is present in the $params array, it replaces the
  53       * default.
  54       *
  55       * @param array $params Hash containing any parameters different from the
  56       *              defaults.
  57       * @access public
  58       */
  59      function Mail_sendmail($params)
  60      {
  61          if (isset($params['sendmail_path'])) {
  62              $this->sendmail_path = $params['sendmail_path'];
  63          }
  64          if (isset($params['sendmail_args'])) {
  65              $this->sendmail_args = $params['sendmail_args'];
  66          }
  67  
  68          /*
  69           * Because we need to pass message headers to the sendmail program on
  70           * the commandline, we can't guarantee the use of the standard "\r\n"
  71           * separator.  Instead, we use the system's native line separator.
  72           */
  73          if (defined('PHP_EOL')) {
  74              $this->sep = PHP_EOL;
  75          } else {
  76              $this->sep = (strpos(PHP_OS, 'WIN') === false) ? "\n" : "\r\n";
  77          }
  78      }
  79  
  80      /**
  81       * Implements Mail::send() function using the sendmail
  82       * command-line binary.
  83       *
  84       * @param mixed $recipients Either a comma-seperated list of recipients
  85       *              (RFC822 compliant), or an array of recipients,
  86       *              each RFC822 valid. This may contain recipients not
  87       *              specified in the headers, for Bcc:, resending
  88       *              messages, etc.
  89       *
  90       * @param array $headers The array of headers to send with the mail, in an
  91       *              associative array, where the array key is the
  92       *              header name (ie, 'Subject'), and the array value
  93       *              is the header value (ie, 'test'). The header
  94       *              produced from those values would be 'Subject:
  95       *              test'.
  96       *
  97       * @param string $body The full text of the message body, including any
  98       *               Mime parts, etc.
  99       *
 100       * @return mixed Returns true on success, or a PEAR_Error
 101       *               containing a descriptive error message on
 102       *               failure.
 103       * @access public
 104       */
 105      function send($recipients, $headers, $body)
 106      {
 107          $recipients = $this->parseRecipients($recipients);
 108          if (PEAR::isError($recipients)) {
 109              return $recipients;
 110          }
 111          $recipients = escapeShellCmd(implode(' ', $recipients));
 112  
 113          $this->_sanitizeHeaders($headers);
 114          $headerElements = $this->prepareHeaders($headers);
 115          if (PEAR::isError($headerElements)) {
 116              return $headerElements;
 117          }
 118          list($from, $text_headers) = $headerElements;
 119  
 120          if (!isset($from)) {
 121              return PEAR::raiseError('No from address given.');
 122          } elseif (strpos($from, ' ') !== false ||
 123                    strpos($from, ';') !== false ||
 124                    strpos($from, '&') !== false ||
 125                    strpos($from, '`') !== false) {
 126              return PEAR::raiseError('From address specified with dangerous characters.');
 127          }
 128  
 129          $from = escapeShellCmd($from);
 130          $mail = @popen($this->sendmail_path . (!empty($this->sendmail_args) ? ' ' . $this->sendmail_args : '') . " -f$from -- $recipients", 'w');
 131          if (!$mail) {
 132              return PEAR::raiseError('Failed to open sendmail [' . $this->sendmail_path . '] for execution.');
 133          }
 134  
 135          // Write the headers following by two newlines: one to end the headers
 136          // section and a second to separate the headers block from the body.
 137          fputs($mail, $text_headers . $this->sep . $this->sep);
 138  
 139          fputs($mail, $body);
 140          $result = pclose($mail);
 141          if (version_compare(phpversion(), '4.2.3') == -1) {
 142              // With older php versions, we need to shift the pclose
 143              // result to get the exit code.
 144              $result = $result >> 8 & 0xFF;
 145          }
 146  
 147          if ($result != 0) {
 148              return PEAR::raiseError('sendmail returned error code ' . $result,
 149                                      $result);
 150          }
 151  
 152          return true;
 153      }
 154  
 155  }


Généré le : Wed Nov 21 12:27:40 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics