/*
Script desenvolvido por: Pablo Costa
Fonte em formato texto:
http://www.ivend.com.br/~pablo/pub/checkemail.php.txt
O funcionamento deste depende de uma boa conexao a internet,
pois ele realiza uma conexao no servidor de email e verifica
se o email existe.
Caso o servidor de email esteja fora do ar no momento,
de execução deste script ele nao funcionara.
Este script funciona da seguinte maneira:
- Verifica se o email tem um formato valido
- Extrai o dominio do email e procura qual seu servidor
- conecta-se a este servidor e tenta enviar uma mensagem
para o email fornecido (So tenta, nao chega a mandar).
- Se o servidor aceitar o email eh porque ele existe
Observacoes: Alguns servidores de email, por exemplo qmail
podem estar configurados para aceitar qualquer email como valido
portanto este script pode falhar aceitando como valido
um email que nao existe. Mas isto eh um pouco raro :-)
Baseado em algumas partes do codigo do php3domo :
Endereco:
http://gateway.digitaria.com/~chris/php3domo/
Download:
http://gateway.digitaria.com/~chris/php3domo/php3domo.zip
Entrada no Hotscript
http://www.hotscripts.com/Detailed/2192.html
*/
set_time_limit(60);
function validate_email ($address) {
return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.' . '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $address));
}
function send_smtp_command($socket, $command, $success_code) {
/*
send_smtp_command:
1) Sends an arbitrary command
2) Waits for the response
3) Matches that response against the expected result and returns true or false
*/
fputs($socket, "$command\r\n");
$result = "";
$result = fgets($socket, 1024);
if (eregi("^$success_code", $result)) {
return true;
}
else {
echo("Retorno recebido: '$result' Esperava-se que o codigo de status começasse com '$success_code'.");
return false;
}
}
print("Verificando formato do E-mail
");
if (!eregi("(.+)@(.+[.].+)", $email, $regs) || !validate_email($email)) {
echo("'$email' esta em formato invalido.");
exit();
}
$username = $regs[1];
$host = $regs[2];
$valid_address = true;
print "
$username@$host parece ser valido.
\r\n";
print "Procurando servidor de e-mail
";
// Procura servidor de Email
if (!getmxrr($host, $mxhosts)) {
if (ereg("[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}", gethostbyname($host))) {
$mxhosts[0] = $host;
}
}
if (sizeof($mxhosts) < 1) {
$valid_address = false;
echo("Não foi possível localizar o servidor de email para '$host'. Ele pode estar passando por problemas técnicos ou nao existe");
exit();
}
// Listas todos em ordem
print "Servidores registrados para seu dominio:
";
while ( list( $key, $server_name ) = each( $mxhosts ) ) {
echo "- $server_name
";
}
print "
\r\n";
print "Conectando-se ao servidor de e-mail:
";
// Tentativa de se conectar a um servidor
for ($i = 0; $i < sizeof($mxhosts); $i++) {
print "Tentando estabelecer conexao com: $mxhosts[$i]
";
$smtp_socket = fsockopen($mxhosts[$i], 25, $errno, $errstr);
if (!$smtp_socket) {
echo("O servidor de e-mail $mxhosts[$i] parece nao respoder! Por favor tente daqui a pouco.
");
exit();
}
else {
print "Conectado.
";
break;
}
}
if ($smtp_socket) {
print "Verificando se o email existe...
";
flush();
sleep(10);
set_socket_blocking($smtp_socket, false);
print "O servidor e benvindo para nos.
";
set_socket_blocking($smtp_socket, true);
print "Cumprimentando o servidor.
\r\n";
flush();
if (!send_smtp_command($smtp_socket, "HELO $HTTP_HOST", "2")) {
$valid_address = false;
}
else {
print "Enviando o remetente .
\r\n";
flush();
if (!send_smtp_command($smtp_socket, "MAIL FROM: postmaster@ivend.com.br", "250")) {
$valid_address = false;
}
else {
print "Enviando o destinatario.
\r\n";
flush();
if (!send_smtp_command($smtp_socket, "RCPT TO:$email", "25")) {
$valid_address = false;
}
}
}
fclose($smtp_socket);
}
if ($valid_address) {
print "Email Valido";
}
else {
print "Email invalido
";
}
?>