You are here

function SMTP::Connect in SMTP Authentication Support 5

Same name and namespace in other branches
  1. 7.2 smtp.transport.inc \SMTP::Connect()
  2. 7 smtp.transport.inc \SMTP::Connect()

Connect to the server specified on the port specified. If the port is not specified use the default SMTP_PORT. If tval is specified then a connection will try and be established with the server for that number of seconds. If tval is not specified the default is 30 seconds to try on the connection.

SMTP CODE SUCCESS: 220 SMTP CODE FAILURE: 421 @access public

Return value

bool

File

./smtp.module, line 2055
Enables drupal to send email directly to an SMTP server using authentication. Uses the PHPMailer class by Brent R. Matzelle.

Class

SMTP
SMTP is rfc 821 compliant and implements all the rfc 821 SMTP commands except TURN which will always return a not implemented error. SMTP also provides some utility methods for sending mail to an SMTP server. @package PHPMailer @author Chris Ryan

Code

function Connect($host, $port = 0, $tval = 30) {

  # set the error val to null so there is no confusion
  $this->error = null;

  # make sure we are __not__ connected
  if ($this
    ->connected()) {

    # ok we are connected! what should we do?

    # for now we will just give an error saying we

    # are already connected
    $this->error = array(
      "error" => "Already connected to a server",
    );
    return false;
  }
  if (empty($port)) {
    $port = $this->SMTP_PORT;
  }

  #connect to the smtp server
  $this->smtp_conn = fsockopen($this->protocol . $host, $port, $errno, $errstr, $tval);

  # give up after ? secs

  # verify we connected properly
  if (empty($this->smtp_conn)) {
    $this->error = array(
      "error" => "Failed to connect to server",
      "errno" => $errno,
      "errstr" => $errstr,
    );
    if ($this->do_debug >= 1) {
      echo "SMTP -> ERROR: " . $this->error["error"] . ": {$errstr} ({$errno})" . $this->CRLF;
    }
    return false;
  }

  # sometimes the SMTP server takes a little longer to respond

  # so we will give it a longer timeout for the first read

  // Windows still does not have support for this timeout function
  if (substr(PHP_OS, 0, 3) != "WIN") {
    socket_set_timeout($this->smtp_conn, $tval, 0);
  }

  # get any announcement stuff
  $announce = $this
    ->get_lines();

  # set the timeout  of any socket functions at 1/10 of a second

  //if(function_exists("socket_set_timeout"))

  //   socket_set_timeout($this->smtp_conn, 0, 100000);
  if ($this->do_debug >= 2) {
    echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce;
  }
  return true;
}