function connect($host = null, $port = null, $user = null, $pass = null, $vssl = null, $tout = null, $name = null, $context = null, $login = null, $debug = null) { if (!FUNC4::is_debug($debug)) { $debug = debug_backtrace(); } global $_RESULT; $_RESULT = $err = array(); $_smtp = new SMTP4(); if ($port == null) { $port = $_smtp->PORT; } if ($tout == null) { $tout = $_smtp->TOUT; } if (!is_string($host)) { $err[] = 'invalid host type'; } else { $host = strtolower(trim($host)); if (!($host != '' && ($host == 'localhost' || FUNC4::is_ipv4($host) || FUNC4::is_hostname($host, true, $debug)))) { $err[] = 'invalid host value'; } } if (!(is_int($port) && $port > 0)) { $err[] = 'invalid port value'; } if ($user != null) { if (!is_string($user)) { $err[] = 'invalid username type'; } else { if (($user = FUNC4::str_clear($user)) == '') { $err[] = 'invalid username value'; } } } if ($pass != null) { if (!is_string($pass)) { $err[] = 'invalid password type'; } else { if (($pass = FUNC4::str_clear($pass)) == '') { $err[] = 'invalid password value'; } } } if ($user != null && $pass == null || $user == null && $pass != null) { $err[] = 'invalid username/password combination'; } if ($vssl != null) { if (!is_string($vssl)) { $err[] = 'invalid ssl version type'; } else { $vssl = strtolower($vssl); if (!($vssl == 'tls' || $vssl == 'ssl' || $vssl == 'sslv2' || $vssl == 'sslv3')) { $err[] = 'invalid ssl version value'; } } } if (!(is_int($tout) && $tout > 0)) { $err[] = 'invalid timeout value'; } if ($name != null) { if (!is_string($name)) { $err[] = 'invalid name type'; } else { $name = strtolower(trim($name)); if (!($name != '' && ($name == 'localhost' || FUNC4::is_ipv4($name) || FUNC4::is_hostname($name, true, $debug)))) { $err[] = 'invalid name value'; } } } else { $name = '127.0.0.1'; } if ($context != null && !is_resource($context)) { $err[] = 'invalid context type'; } if ($login != null) { $login = strtolower(trim($login)); if (!($login == 'login' || $login == 'plain' || $login == 'cram-md5')) { $err[] = 'invalid authentication type value'; } } if (count($err) > 0) { FUNC4::trace($debug, implode(', ', $err)); } else { $ret = false; $prt = $vssl == null ? 'tcp' : $vssl; $conn = $context == null ? fsockopen($prt . '://' . $host, $port, $errno, $errstr, $tout) : fsockopen($prt . '://' . $host, $port, $errno, $errstr, $tout, $context); if (!$conn) { $_RESULT[101] = $errstr; } else { if (!socket_set_timeout($conn, $_smtp->COUT)) { $_RESULT[102] = 'could not set socket timeout'; } else { if (!SMTP4::_cres($conn, $resp, 220, null, $debug)) { $_RESULT[103] = $resp; } else { $continue = true; if (!SMTP4::ehlo($conn, $name, $debug)) { $continue = SMTP4::helo($conn, $name, $debug); } if ($continue) { if ($user == null) { $ret = true; } else { if ($login != null) { $ret = SMTP4::auth($conn, $user, $pass, $login, $debug); } else { list($code, $arr) = each($_RESULT); $auth['default'] = $auth['login'] = $auth['plain'] = $auth['cram-md5'] = false; foreach ($arr as $line) { if (substr($line, 0, strlen('250-AUTH ')) == '250-AUTH ') { foreach (explode(' ', substr($line, strlen('250-AUTH '))) as $type) { $type = strtolower(trim($type)); if ($type == 'login' || $type == 'plain' || $type == 'cram-md5') { $auth[$type] = true; } } } else { if (substr($line, 0, strlen('250 AUTH=')) == '250 AUTH=') { $expl = explode(' ', strtolower(trim(substr($line, strlen('250 AUTH=')))), 2); if ($expl[0] == 'login' || $expl[0] == 'plain' || $expl[0] == 'cram-md5') { $auth['default'] = $expl[0]; } } } } if ($auth['default']) { $ret = SMTP4::auth($conn, $user, $pass, $auth['default'], $debug); } if (!$ret && $auth['login'] && $auth['default'] != 'login') { $ret = SMTP4::auth($conn, $user, $pass, 'login', $debug); } if (!$ret && $auth['plain'] && $auth['default'] != 'plain') { $ret = SMTP4::auth($conn, $user, $pass, 'plain', $debug); } if (!$ret && $auth['cram-md5'] && $auth['default'] != 'cram-md5') { $ret = SMTP4::auth($conn, $user, $pass, 'cram-md5', $debug); } if (!$ret && !$auth['login'] && $auth['default'] != 'login') { $ret = SMTP4::auth($conn, $user, $pass, 'login', $debug); } if (!$ret && !$auth['plain'] && $auth['default'] != 'plain') { $ret = SMTP4::auth($conn, $user, $pass, 'plain', $debug); } if (!$ret && !$auth['cram-md5'] && $auth['default'] != 'cram-md5') { $ret = SMTP4::auth($conn, $user, $pass, 'cram-md5', $debug); } } } } } } } if (!$ret) { if (is_resource($conn)) { SMTP4::disconnect($conn, $debug); } $conn = false; } return $conn; } }