function parse_address_list($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null)
  {
    if (!isset($this->mail_rfc822))
    {
      $obj = new mail_rfc822($address, $default_domain, $nest_groups, $validate, $limit);
      return $obj->parse_address_list();
    }

    if (isset($address)) $this->address = $address;
    if (isset($default_domain)) $this->default_domain = $default_domain;
    if (isset($nest_groups)) $this->nest_groups = $nest_groups;
    if (isset($validate)) $this->validate = $validate;
    if (isset($limit)) $this->limit = $limit;

    $this->structure = array();
    $this->addresses = array();
    $this->error = null;
    $this->index = null;

    while ($this->address = $this->_split_addresses($this->address))
    {
      continue;
    }

    if ($this->address === false || isset($this->error))
    {
      return false;
    }
    set_time_limit(30);
    for ($i = 0; $i < count($this->addresses); $i++)
    {
      if (($return = $this->_validate_address($this->addresses[$i])) === false || isset($this->error))
      {
        return false;
      }

      if (!$this->nest_groups)
      {
        $this->structure = array_merge($this->structure, $return);
      }
      else
      {
        $this->structure[] = $return;
      }
    }

    return $this->structure;
  }
  function _smtp_send(&$recipients)
  {
    require_once(LIMB_DIR . '/core/lib/mail/smtp.class.php');
    require_once(LIMB_DIR . '/core/lib/mail/mail_rfc822.class.php');

    $this->set_smtp_params(SMTP_HOST, SMTP_PORT, SMTP_HELO, SMTP_AUTH, SMTP_USER, SMTP_PASSWORD);

    $smtp =& smtp :: connect($this->smtp_params);

    foreach ($recipients as $recipient)
    {
      $addresses = mail_rfc822 :: parse_address_list($recipient, $this->smtp_params['helo'], null, false);
      foreach ($addresses as $address)
        $smtp_recipients[] = sprintf('%s@%s', $address->mailbox, $address->host);

    }
    unset($addresses); // These are reused
    unset($address); // These are reused

    foreach ($this->headers as $name => $value)
    {
      if ($name == 'Cc' OR $name == 'Bcc')
      {
        $addresses = mail_rfc822 :: parse_address_list($value, $this->smtp_params['helo'], null, false);
        foreach ($addresses as $address)
          $smtp_recipients[] = sprintf('%s@%s', $address->mailbox, $address->host);
      }
      if ($name == 'Bcc')
        continue;

      $headers[] = $name . ': ' . $this->_encode_header($value, $this->build_params['head_charset']);
    }

    $headers[] = 'To: ' . $this->_encode_header(implode(', ', $recipients), $this->build_params['head_charset']);
    $send_params['headers'] = $headers;
    $send_params['recipients'] = array_values(array_unique($smtp_recipients));
    $send_params['body'] = $this->output;

    if (isset($this->return_path))
      $send_params['from'] = $this->return_path;
    elseif (!empty($this->headers['From']))
    {
      $from = mail_rfc822 :: parse_address_list($this->headers['From']);
      $send_params['from'] = sprintf('%s@%s', $from[0]->mailbox, $from[0]->host);
    }
    else
      $send_params['from'] = 'postmaster@' . $this->smtp_params['helo'];

    if (!$smtp->send($send_params))
    {
      $this->errors = $smtp->errors;
      return false;
    }
    return true;
  }