ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
All Data Structures Namespaces Files Functions Variables Modules Pages
Mail.php
Go to the documentation of this file.
1 <?php
46 require_once 'PEAR.php';
47 
57 class Mail
58 {
63  var $sep = "\r\n";
64 
74  function &factory($driver, $params = array())
75  {
76  $driver = strtolower($driver);
77  @include_once 'Mail/' . $driver . '.php';
78  $class = 'Mail_' . $driver;
79  if (class_exists($class)) {
80  $mailer = new $class($params);
81  return $mailer;
82  } else {
83  return PEAR::raiseError('Unable to find class for driver ' . $driver);
84  }
85  }
86 
114  function send($recipients, $headers, $body)
115  {
116  if (!is_array($headers)) {
117  return PEAR::raiseError('$headers must be an array');
118  }
119 
120  $result = $this->_sanitizeHeaders($headers);
121  if (is_a($result, 'PEAR_Error')) {
122  return $result;
123  }
124 
125  // if we're passed an array of recipients, implode it.
126  if (is_array($recipients)) {
127  $recipients = implode(', ', $recipients);
128  }
129 
130  // get the Subject out of the headers array so that we can
131  // pass it as a seperate argument to mail().
132  $subject = '';
133  if (isset($headers['Subject'])) {
134  $subject = $headers['Subject'];
135  unset($headers['Subject']);
136  }
137 
138  // flatten the headers out.
139  list(, $text_headers) = Mail::prepareHeaders($headers);
140 
141  return mail($recipients, $subject, $body, $text_headers);
142  }
143 
153  function _sanitizeHeaders(&$headers)
154  {
155  foreach ($headers as $key => $value) {
156  $headers[$key] =
157  preg_replace('=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i',
158  null, $value);
159  }
160  }
161 
178  function prepareHeaders($headers)
179  {
180  $lines = array();
181  $from = null;
182 
183  foreach ($headers as $key => $value) {
184  if (strcasecmp($key, 'From') === 0) {
185  include_once 'Mail/RFC822.php';
186  $parser = new Mail_RFC822();
187  $addresses = $parser->parseAddressList($value, 'localhost', false);
188  if (is_a($addresses, 'PEAR_Error')) {
189  return $addresses;
190  }
191 
192  $from = $addresses[0]->mailbox . '@' . $addresses[0]->host;
193 
194  // Reject envelope From: addresses with spaces.
195  if (strstr($from, ' ')) {
196  return false;
197  }
198 
199  $lines[] = $key . ': ' . $value;
200  } elseif (strcasecmp($key, 'Received') === 0) {
201  $received = array();
202  if (is_array($value)) {
203  foreach ($value as $line) {
204  $received[] = $key . ': ' . $line;
205  }
206  }
207  else {
208  $received[] = $key . ': ' . $value;
209  }
210  // Put Received: headers at the top. Spam detectors often
211  // flag messages with Received: headers after the Subject:
212  // as spam.
213  $lines = array_merge($received, $lines);
214  } else {
215  // If $value is an array (i.e., a list of addresses), convert
216  // it to a comma-delimited string of its elements (addresses).
217  if (is_array($value)) {
218  $value = implode(', ', $value);
219  }
220  $lines[] = $key . ': ' . $value;
221  }
222  }
223 
224  return array($from, join($this->sep, $lines));
225  }
226 
240  function parseRecipients($recipients)
241  {
242  include_once 'Mail/RFC822.php';
243 
244  // if we're passed an array, assume addresses are valid and
245  // implode them before parsing.
246  if (is_array($recipients)) {
247  $recipients = implode(', ', $recipients);
248  }
249 
250  // Parse recipients, leaving out all personal info. This is
251  // for smtp recipients, etc. All relevant personal information
252  // should already be in the headers.
253  $addresses = Mail_RFC822::parseAddressList($recipients, 'localhost', false);
254 
255  // If parseAddressList() returned a PEAR_Error object, just return it.
256  if (is_a($addresses, 'PEAR_Error')) {
257  return $addresses;
258  }
259 
260  $recipients = array();
261  if (is_array($addresses)) {
262  foreach ($addresses as $ob) {
263  $recipients[] = $ob->mailbox . '@' . $ob->host;
264  }
265  }
266 
267  return $recipients;
268  }
269 
270 }
$result
send($recipients, $headers, $body)
Implements Mail::send() function using php&#39;s built-in mail() command.
Definition: Mail.php:114
& factory($driver, $params=array())
Provides an interface for generating Mail:: objects of various types.
Definition: Mail.php:74
parseAddressList($address=null, $default_domain=null, $nest_groups=null, $validate=null, $limit=null)
Starts the whole process.
Definition: RFC822.php:173
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
$sep
Definition: Mail.php:63
internal PHP-mail() implementation of the PEAR Mail:: interface.
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&#39;s de...
Definition: PEAR.php:524