ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
Mail_sendmail Class Reference
+ Inheritance diagram for Mail_sendmail:
+ Collaboration diagram for Mail_sendmail:

Public Member Functions

 Mail_sendmail ($params)
 Constructor. More...
 
 send ($recipients, $headers, $body)
 Implements Mail::send() function using the sendmail command-line binary. More...
 
- Public Member Functions inherited from Mail
factory ($driver, $params=array())
 Provides an interface for generating Mail:: objects of various types. More...
 
 send ($recipients, $headers, $body)
 Implements Mail::send() function using php's built-in mail() command. More...
 
 _sanitizeHeaders (&$headers)
 Sanitize an array of mail headers by removing any additional header strings present in a legitimate header's value. More...
 
 prepareHeaders ($headers)
 Take an array of mail headers and return a string containing text usable in sending a message. More...
 
 parseRecipients ($recipients)
 Take a set of recipients and parse them, returning an array of bare addresses (forward paths) that can be passed to sendmail or an smtp server with the rcpt to: command. More...
 

Data Fields

 $sendmail_path = '/usr/sbin/sendmail'
 
 $sendmail_args = '-i'
 
- Data Fields inherited from Mail
 $sep = "\r\n"
 

Detailed Description

Definition at line 25 of file sendmail.php.

Member Function Documentation

◆ Mail_sendmail()

Mail_sendmail::Mail_sendmail (   $params)

Constructor.

Instantiates a new Mail_sendmail:: object based on the parameters passed in. It looks for the following parameters: sendmail_path The location of the sendmail binary on the filesystem. Defaults to '/usr/sbin/sendmail'.

sendmail_args Any extra parameters to pass to the sendmail or sendmail wrapper binary.

If a parameter is present in the $params array, it replaces the default.

Parameters
array$paramsHash containing any parameters different from the defaults. public

Definition at line 59 of file sendmail.php.

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  }

◆ send()

Mail_sendmail::send (   $recipients,
  $headers,
  $body 
)

Implements Mail::send() function using the sendmail command-line binary.

Parameters
mixed$recipientsEither a comma-seperated list of recipients (RFC822 compliant), or an array of recipients, each RFC822 valid. This may contain recipients not specified in the headers, for Bcc:, resending messages, etc.
array$headersThe array of headers to send with the mail, in an associative array, where the array key is the header name (ie, 'Subject'), and the array value is the header value (ie, 'test'). The header produced from those values would be 'Subject: test'.
string$bodyThe full text of the message body, including any Mime parts, etc.
Returns
mixed Returns true on success, or a PEAR_Error containing a descriptive error message on failure. public

Definition at line 105 of file sendmail.php.

References $result, Mail\_sanitizeHeaders(), Mail\parseRecipients(), Mail\prepareHeaders(), and PEAR\raiseError().

106  {
107  if (!is_array($headers)) {
108  return PEAR::raiseError('$headers must be an array');
109  }
110 
111  $result = $this->_sanitizeHeaders($headers);
112  if (is_a($result, 'PEAR_Error')) {
113  return $result;
114  }
115 
116  $recipients = $this->parseRecipients($recipients);
117  if (is_a($recipients, 'PEAR_Error')) {
118  return $recipients;
119  }
120  $recipients = implode(' ', array_map('escapeshellarg', $recipients));
121 
122  $headerElements = $this->prepareHeaders($headers);
123  if (is_a($headerElements, 'PEAR_Error')) {
124  return $headerElements;
125  }
126  list($from, $text_headers) = $headerElements;
127 
128  /* Since few MTAs are going to allow this header to be forged
129  * unless it's in the MAIL FROM: exchange, we'll use
130  * Return-Path instead of From: if it's set. */
131  if (!empty($headers['Return-Path'])) {
132  $from = $headers['Return-Path'];
133  }
134 
135  if (!isset($from)) {
136  return PEAR::raiseError('No from address given.');
137  } elseif (strpos($from, ' ') !== false ||
138  strpos($from, ';') !== false ||
139  strpos($from, '&') !== false ||
140  strpos($from, '`') !== false) {
141  return PEAR::raiseError('From address specified with dangerous characters.');
142  }
143 
144  $from = escapeshellarg($from); // Security bug #16200
145 
146  $mail = @popen($this->sendmail_path . (!empty($this->sendmail_args) ? ' ' . $this->sendmail_args : '') . " -f$from -- $recipients", 'w');
147  if (!$mail) {
148  return PEAR::raiseError('Failed to open sendmail [' . $this->sendmail_path . '] for execution.');
149  }
150 
151  // Write the headers following by two newlines: one to end the headers
152  // section and a second to separate the headers block from the body.
153  fputs($mail, $text_headers . $this->sep . $this->sep);
154 
155  fputs($mail, $body);
156  $result = pclose($mail);
157  if (version_compare(phpversion(), '4.2.3') == -1) {
158  // With older php versions, we need to shift the pclose
159  // result to get the exit code.
160  $result = $result >> 8 & 0xFF;
161  }
162 
163  if ($result != 0) {
164  return PEAR::raiseError('sendmail returned error code ' . $result,
165  $result);
166  }
167 
168  return true;
169  }
$result
parseRecipients($recipients)
Take a set of recipients and parse them, returning an array of bare addresses (forward paths) that ca...
Definition: Mail.php:240
_sanitizeHeaders(&$headers)
Sanitize an array of mail headers by removing any additional header strings present in a legitimate h...
Definition: Mail.php:153
prepareHeaders($headers)
Take an array of mail headers and return a string containing text usable in sending a message...
Definition: Mail.php:178
& raiseError($message=null, $code=null, $mode=null, $options=null, $userinfo=null, $error_class=null, $skipmsg=false)
This method is a wrapper that returns an instance of the configured error class with this object's de...
Definition: PEAR.php:524
+ Here is the call graph for this function:

Field Documentation

◆ $sendmail_args

Mail_sendmail::$sendmail_args = '-i'

Definition at line 39 of file sendmail.php.

◆ $sendmail_path

Mail_sendmail::$sendmail_path = '/usr/sbin/sendmail'

Definition at line 32 of file sendmail.php.


The documentation for this class was generated from the following file: