Статьи,обзоры,справочники по PHP

       

Как опpеделить валидность e-mail?


Функция, предложенная Maxim Matyukhin :
function valid_mail ($email) { if (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-\.]+)\.([a-z]{2,3}$)", $email, $check)) { if (getmxrr($check[1] . "." . $check[2]) return "Valid"; else return "No MX for " . $check[1] . "." . $check[2]; } else return "Badly formed address"; }

Есть другой способ, использующий сокеты, предложенный Jon S. Stevens <?php

/* By: Jon S. Stevens jon@clearink.com Copyright 1998-1999 Jon S. Stevens, Clear Ink This code has all the normal disclaimers. It is free for any use, just keep the credits intact. */

function validateEmail ( $email ) { global $SERVER_NAME; $return = array ( false, "" ); list ( $user, $domain ) = split ( "@", $email, 2 ); $tld = $domain; if ( checkdnsrr ( $tld, "MX" ) ) { if ( getmxrr ( $tld, $mxhosts, $weight ) ) { for ( $i = 0; $i < count ( $mxhosts ); $i++ ) { $fp = fsockopen ( $mxhosts[$i], 25 ); if ( $fp ) { $s = 0; $c = 0; $out = ""; set_socket_blocking ( $fp, false ); do { $out = fgets ( $fp, 2500 ); if ( ereg ( "^220", $out ) ) { $s = 0; $out = ""; $c++; } else if ( ( $c > 0 ) && ( $out == "" ) ) { break; } else { $s++; } if ( $s == 9999 ) { break; }

} while ( $out == "" ); set_socket_blocking ( $fp, true );

fputs ( $fp, "HELO $SERVER_NAME\n" ); $output = fgets ( $fp, 2000 ); fputs ( $fp, "MAIL FROM: <info@" . $tld . ">\n" ); $output = fgets ( $fp, 2000 ); fputs ( $fp, "RCPT TO: <$email>\n" ); $output = fgets ( $fp, 2000 ); if ( ereg ( "^250", $output ) ) { $return[0] = true; } else { $return[0] = false; $return[1] = $output; } fputs ( $fp, "QUIT\n" ); fclose( $fp );

if ( $return[0] == true ) { break; } } } } } return $return; } ?>



Содержание раздела