3v4l.org

run code in 300+ PHP versions simultaneously
<?php // эта функция отправляет команду в сокет, и возвращает ответ от сервера function sWrite( $socket, $data, $echo = true ){ // отображаем отправляемую команду, если это требуется if( $echo ) echo $data; // отправляем команду в сокет fputs( $socket, $data ); // получаем первый байт ответа от сервера $answer = fread( $socket, 1 ); // узнаем информацию о состоянии потока $remains = socket_get_status( $socket ); // и получаем оставшиеся байты ответа от сервера if( $remains --> 0 ) $answer .= fread( $socket, $remains['unread_bytes'] ); // функция возвращает ответ от сервера на переданную команду return $answer; } // адрес электропочты, который надо проверить $email = "twixed@mail.ru"; // получаем данные об MX-записи домена, указанного в email $mx = dns_get_record( end( explode( "@", $email ) ), DNS_MX ); $mx = $mx[0]['target']; // открываем сокет и создаем поток $socket = fsockopen( $mx, 25, $errno, $errstr, 10 ); if( !$socket ){ echo "$errstr ($errno)\n"; }else{ // отправляем пустую строку, чтобы получить приветствие сервера echo sWrite( $socket, "" ); // представляемся сами echo sWrite( $socket, "EHLO example.com\r\n" ); echo sWrite( $socket, "MAIL FROM: dummy@example.com\r\n" ); // запрашиваем разрешение на отправку письма адресату $response = sWrite( $socket, "RCPT TO: $email\r\n" ); echo $response; // закрываем соединение echo sWrite( $socket, "QUIT\r\n" ); fclose( $socket ); // ниже идет простейшая обработка полученного ответа echo "\nCheck report:\n"; if( substr_count( $response, "550" ) > 0 ) echo "Required email address does not exist.\n\n"; else if( substr_count( $response, "250" ) > 0 ) if( substr_count( $response, "OK" ) > 0 ) echo " Required email address exists.\n\n"; else echo " Email address accepted but it looks like the server is working as a relay host.\n\n"; else echo " Required email address existence was not recovered. Last response:\n ---\n$response ---\n\n"; }

preferences:
38.15 ms | 402 KiB | 5 Q