function SMTP::get_lines

5.x SMTP.php protected SMTP::get_lines()

Read the SMTP server's response. Either before eof or socket timeout occurs on the operation. With SMTP we can tell if we have more lines to read if the 4th character is '-' symbol. If it is a space then we don't need to read anything else.

Return value

string

File

inc/PHPMailer/src/SMTP.php, line 1130

Class

SMTP
PHPMailer RFC821 SMTP email transport class. Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.

Code

protected function get_lines() {
  // If the connection is bad, give up straight away
  if (!is_resource($this->smtp_conn)) {
    return '';
  }
  $data = '';
  $endtime = 0;
  stream_set_timeout($this->smtp_conn, $this->Timeout);
  if ($this->Timelimit > 0) {
    $endtime = time() + $this->Timelimit;
  }
  $selR =[$this->smtp_conn];
  $selW = null;
  while (is_resource($this->smtp_conn) and !feof($this->smtp_conn)) {
    //Must pass vars in here as params are by reference
    if (!stream_select($selR, $selW, $selW, $this->Timelimit)) {
      $this->edebug('SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)', self::DEBUG_LOWLEVEL);
      break;
    }
    //Deliberate noise suppression - errors are handled afterwards
    $str = @fgets($this->smtp_conn, 515);
    $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL);
    $data .= $str;
    // If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled),
    // or 4th character is a space, we are done reading, break the loop,
    // string array access is a micro-optimisation over strlen
    if (!isset($str[3]) or (isset($str[3]) and $str[3] == ' ')) {
      break;
    }
    // Timed-out? Log and break
    $info = stream_get_meta_data($this->smtp_conn);
    if ($info['timed_out']) {
      $this->edebug('SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)', self::DEBUG_LOWLEVEL);
      break;
    }
    // Now check if reads took too long
    if ($endtime and time() > $endtime) {
      $this->edebug('SMTP -> get_lines(): timelimit reached (' . $this->Timelimit . ' sec)', self::DEBUG_LOWLEVEL);
      break;
    }
  }

  return $data;
}