PHPMailer\PHPMailer

SMTP::getSMTPConnection()protectedWP 1.0

Create connection to the SMTP server.

Method of the class: SMTP{}

No Hooks.

Return

false|resource.

Usage

// protected - for code of main (parent) or child class
$result = $this->getSMTPConnection( $host, $port, $timeout, $options );
$host(string) (required)
SMTP server IP or host name
$port(int)
The port number to connect to
Default: null
$timeout(int)
How long to wait for the connection to open
Default: 30
$options(array)
An array of options for stream_context_create()
Default: []

SMTP::getSMTPConnection() code WP 6.5.2

protected function getSMTPConnection($host, $port = null, $timeout = 30, $options = [])
{
    static $streamok;
    //This is enabled by default since 5.0.0 but some providers disable it
    //Check this once and cache the result
    if (null === $streamok) {
        $streamok = function_exists('stream_socket_client');
    }

    $errno = 0;
    $errstr = '';
    if ($streamok) {
        $socket_context = stream_context_create($options);
        set_error_handler([$this, 'errorHandler']);
        $connection = stream_socket_client(
            $host . ':' . $port,
            $errno,
            $errstr,
            $timeout,
            STREAM_CLIENT_CONNECT,
            $socket_context
        );
    } else {
        //Fall back to fsockopen which should work in more places, but is missing some features
        $this->edebug(
            'Connection: stream_socket_client not available, falling back to fsockopen',
            self::DEBUG_CONNECTION
        );
        set_error_handler([$this, 'errorHandler']);
        $connection = fsockopen(
            $host,
            $port,
            $errno,
            $errstr,
            $timeout
        );
    }
    restore_error_handler();

    //Verify we connected properly
    if (!is_resource($connection)) {
        $this->setError(
            'Failed to connect to server',
            '',
            (string) $errno,
            $errstr
        );
        $this->edebug(
            'SMTP ERROR: ' . $this->error['error']
            . ": $errstr ($errno)",
            self::DEBUG_CLIENT
        );

        return false;
    }

    //SMTP server can take longer to respond, give longer timeout for first read
    //Windows does not have support for this timeout function
    if (strpos(PHP_OS, 'WIN') !== 0) {
        $max = (int)ini_get('max_execution_time');
        //Don't bother if unlimited, or if set_time_limit is disabled
        if (0 !== $max && $timeout > $max && strpos(ini_get('disable_functions'), 'set_time_limit') === false) {
            @set_time_limit($timeout);
        }
        stream_set_timeout($connection, $timeout, 0);
    }

    return $connection;
}