Здравствуйте, подскажите, пожалуйста, не могу понять в чем может быть дело: Пытаюсь проверить существует ли e-mail используя этот скрипт: http://htmlweb.ru/php/example/is_e-mail.php На локальном xampp сервере все работает замечательно, но после заливки на хостинг здесь Код (Text): if ($connection = fsockopen ($mxhosts[0][$id], $port, $errno, $error, $this->timeout)) { возникает ошибка "110 connection timed out" и, соответственно, email всегда определяется ненастоящим. Посмотреть работу скрипта+phpinfo можно здесь: http://daria2.tom.ru/ Код index.php: Код (Text): <?php define('DEBUG_OK', true); class CCheckMail { var $timeout = 10; var $domain_rules = array("aol.com", "bigfoot.com", "brain.net.pk", "breathemail.net", "compuserve.com", "dialnet.co.uk", "glocksoft.com", "home.com", "msn.com", "rocketmail.com", "uu.net", "yahoo.com", "yahoo.de"); function _is_valid_email($email = "") { return preg_match('/^[.\w-]+@([\w-]+\.)+[a-zA-Z]{2,6}$/', $email); } function _check_domain_rules($domain = "") { return in_array(strtolower($domain), $this->domain_rules); } function execute($email = "") { if (!$this->_is_valid_email($email)) return false; $host = substr(strstr($email, '@'), 1); if ($this->_check_domain_rules($host)) return false; $host .= "."; if (getmxrr($host, $mxhosts[0], $mxhosts[1]) == true) array_multisort($mxhosts[1], $mxhosts[0]); else { $mxhosts[0] = $host; $mxhosts[1] = 10; } if (DEBUG_OK) print_r($mxhosts); $port = 25; $localhost = $_SERVER['HTTP_HOST']; $sender = 'info@' . $localhost; $result = false; $id = 0; while (!$result && $id < count($mxhosts[0])) { if (function_exists("fsockopen")) { if (DEBUG_OK) print_r($id . " " . $mxhosts[0][$id]); if ($connection = fsockopen($mxhosts[0][$id], $port, $errno, $error, $this->timeout)) { fputs($connection, "HELO $localhost\r\n"); // 250 $data = fgets($connection, 1024); $response = substr($data, 0, 1); if (DEBUG_OK) print_r($data); if ($response == '2') // 200, 250 etc. { fputs($connection, "MAIL FROM:<$sender>\r\n"); $data = fgets($connection, 1024); $response = substr($data, 0, 1); if (DEBUG_OK) print_r($data); if ($response == '2') // 200, 250 etc. { fputs($connection, "RCPT TO:<$email>\r\n"); $data = fgets($connection, 1024); $response = substr($data, 0, 1); if (DEBUG_OK) print_r($data); if ($response == '2') // 200, 250 etc. { fputs($connection, "data\r\n"); $data = fgets($connection, 1024); $response = substr($data, 0, 1); if (DEBUG_OK) print_r($data); if ($response == '2') // 200, 250 etc. { $result = true; } } } } fputs($connection, "QUIT\r\n"); fclose($connection); if ($result) return true; } } else break; $id++; } //while return false; } } ?> <?php if (isset($_POST['email'])) { $str = $_POST['email']; $alter = new CCheckMail(); if ($alter->execute($str)) { $result = "Email " . $_POST['email'] . " is real"; } else { $result = "Email " . $_POST['email'] . " is fake"; } } else { $result = "Please fill email"; } ?> <div> Check if email exists: </div> <form method="post" action=""> <input type="text" name="email" value=""/> <input type="submit" value="Send"/> <div> <?php echo $result; ?> </div> </form> <?php phpinfo() ?>
проверил как работает)) Код (Text): Array ( [0] => Array ( [0] => aspmx.l.google.com [1] => alt1.aspmx.l.google.com [2] => alt2.aspmx.l.google.com [3] => aspmx2.googlemail.com [4] => aspmx3.googlemail.com [5] => aspmx4.googlemail.com [6] => aspmx5.googlemail.com ) [1] => Array ( [0] => 10 [1] => 20 [2] => 20 [3] => 30 [4] => 30 [5] => 30 [6] => 30 ) ) 0 aspmx.l.google.com220 mx.google.com ESMTP h190si933522lfh.327 - gsmtp 250 mx.google.com at your service 250 2.1.0 OK h190si933522lfh.327 - gsmtp 250 2.1.5 OK h190si933522lfh.327 - gsmtp E-mail: httpwwwtumblrcomethereal04@tumblr.com Результат: существует а по факту такой почты нет)
@Алекс8 Здравствуйте! Спасибо за ответ. У меня на локальном тоже приняло этот адрес (плохо, что приняло несуществующий, но пока пусть будет так). Вы не знаете почему на хостинге могут возникать проблемы ``connection timed out`` при вызове if ($connection = fsockopen($mxhosts[0][$id], $port, $errno, $error, $this->timeout)) { ? У меня на сервере daria2.tom.ru этот email не принимается по этой причине, как и любой другой валидный
@dakotta у меня и на daria2.tom.ru отвечает)) только там говорит другое) Код (Text): Array ( [0] => Array ( [0] => aspmx.l.google.com [1] => alt1.aspmx.l.google.com [2] => alt2.aspmx.l.google.com [3] => aspmx2.googlemail.com [4] => aspmx3.googlemail.com [5] => aspmx4.googlemail.com [6] => aspmx5.googlemail.com ) [1] => Array ( [0] => 10 [1] => 20 [2] => 20 [3] => 30 [4] => 30 [5] => 30 [6] => 30 ) ) 0 aspmx.l.google.com1 alt1.aspmx.l.google.com2 alt2.aspmx.l.google.com3 aspmx2.googlemail.com4 aspmx3.googlemail.com5 aspmx4.googlemail.com6 aspmx5.googlemail.com Check if email exists: Email 1httpwwwtumblrcomethereal04@tumblr.com is fake
@Алекс8 Да, все верно, там отвечает, но всегда fake и для валидных и для невалидных адресов, потому что возникает ошибка на строке с fsockopen. Сделала var_dump ошибки. Например, я вводила свой валидный e-mail, получила: Код (Text): Array ( [0] => Array ( [0] => gmail-smtp-in.l.google.com [1] => alt1.gmail-smtp-in.l.google.com [2] => alt2.gmail-smtp-in.l.google.com [3] => alt3.gmail-smtp-in.l.google.com [4] => alt4.gmail-smtp-in.l.google.com ) [1] => Array ( [0] => 5 [1] => 10 [2] => 20 [3] => 30 [4] => 40 ) ) 0 gmail-smtp-in.l.google.com string(8) "Errors! " string(32) "host: gmail-smtp-in.l.google.com" string(8) "port: 25" string(10) "errno: 110" string(27) "error: Connection timed out" string(11) "timeout: 10" 1 alt1.gmail-smtp-in.l.google.com string(8) "Errors! " string(37) "host: alt1.gmail-smtp-in.l.google.com" string(8) "port: 25" string(10) "errno: 110" string(27) "error: Connection timed out" string(11) "timeout: 10" 2 alt2.gmail-smtp-in.l.google.com string(8) "Errors! " string(37) "host: alt2.gmail-smtp-in.l.google.com" string(8) "port: 25" string(10) "errno: 110" string(27) "error: Connection timed out" string(11) "timeout: 10" 3 alt3.gmail-smtp-in.l.google.com string(8) "Errors! " string(37) "host: alt3.gmail-smtp-in.l.google.com" string(8) "port: 25" string(10) "errno: 110" string(27) "error: Connection timed out" string(11) "timeout: 10" 4 alt4.gmail-smtp-in.l.google.com string(8) "Errors! " string(37) "host: alt4.gmail-smtp-in.l.google.com" string(8) "port: 25" string(10) "errno: 110" string(27) "error: Connection timed out" string(11) "timeout: 10" Email dsbaranova@gmail.com is fake