[ Index ]
 

Code source de SPIP Agora 1.4

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/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.8 $
  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 = '';
  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'])) $this->sendmail_path = $params['sendmail_path'];
  62          if (isset($params['sendmail_args'])) $this->sendmail_args = $params['sendmail_args'];
  63  
  64          /*
  65           * Because we need to pass message headers to the sendmail program on
  66           * the commandline, we can't guarantee the use of the standard "\r\n"
  67           * separator.  Instead, we use the system's native line separator.
  68           */
  69          $this->sep = (strstr(PHP_OS, 'WIN')) ? "\r\n" : "\n";
  70      }
  71  
  72      /**
  73       * Implements Mail::send() function using the sendmail
  74       * command-line binary.
  75       *
  76       * @param mixed $recipients Either a comma-seperated list of recipients
  77       *              (RFC822 compliant), or an array of recipients,
  78       *              each RFC822 valid. This may contain recipients not
  79       *              specified in the headers, for Bcc:, resending
  80       *              messages, etc.
  81       *
  82       * @param array $headers The array of headers to send with the mail, in an
  83       *              associative array, where the array key is the
  84       *              header name (ie, 'Subject'), and the array value
  85       *              is the header value (ie, 'test'). The header
  86       *              produced from those values would be 'Subject:
  87       *              test'.
  88       *
  89       * @param string $body The full text of the message body, including any
  90       *               Mime parts, etc.
  91       *
  92       * @return mixed Returns true on success, or a PEAR_Error
  93       *               containing a descriptive error message on
  94       *               failure.
  95       * @access public
  96       */
  97      function send($recipients, $headers, $body)
  98      {
  99          $recipients = $this->parseRecipients($recipients);
 100          if (PEAR::isError($recipients)) {
 101              return $recipients;
 102          }
 103          $recipients = escapeShellCmd(implode(' ', $recipients));
 104  
 105          $headerElements = $this->prepareHeaders($headers);
 106          if (PEAR::isError($headerElements)) {
 107              return $headerElements;
 108          }
 109          list($from, $text_headers) = $headerElements;
 110  
 111          if (!isset($from)) {
 112              return PEAR::raiseError('No from address given.');
 113          } elseif (strstr($from, ' ') ||
 114                    strstr($from, ';') ||
 115                    strstr($from, '&') ||
 116                    strstr($from, '`')) {
 117              return PEAR::raiseError('From address specified with dangerous characters.');
 118          }
 119  
 120          $result = 0;
 121          if (@is_file($this->sendmail_path)) {
 122              $from = escapeShellCmd($from);
 123              $mail = popen($this->sendmail_path . (!empty($this->sendmail_args) ? ' ' . $this->sendmail_args : '') . " -f$from -- $recipients", 'w');
 124              fputs($mail, $text_headers);
 125              fputs($mail, $this->sep);  // newline to end the headers section
 126              fputs($mail, $body);
 127              $result = pclose($mail) >> 8 & 0xFF; // need to shift the pclose result to get the exit code
 128          } else {
 129              return PEAR::raiseError('sendmail [' . $this->sendmail_path . '] is not a valid file');
 130          }
 131  
 132          if ($result != 0) {
 133              return PEAR::raiseError('sendmail returned error code ' . $result);
 134          }
 135  
 136          return true;
 137      }
 138  
 139  }


Généré le : Sat Feb 24 14:40:03 2007 par Balluche grâce à PHPXref 0.7