Validação de e-mail usando o DIG
Publicado por João Paulo de Oliveira Faria 16/09/2004
[ Hits: 7.828 ]
Homepage: http://www.jpfaria.com
Classe que valida email usando o DIG para conferir se o domínio digitado existe na internet dentre outras conferências.
Funciona somente em servidores *unix que tenha o DIG corretamente instalado.
Na maioria das versões Linux o dig ja vem instalado.
Contribuições e melhorias no código serão
bem vindas.
<? // validatemail.php
/*
--------------------------------------------------------------------------
VALIDAÇÃO DE EMAIL USANDO O DIG
AUTOR: JOÃO PAULO DE OLIVEIRA FARIA
ICQ: 13041300
MSN: JOAOPAULO@AWM.COM.BR
EMAIL: JOAOPAULO@DEOLIVEIRA.COM.BR
VERSÃO: 0.1.0
--------------------------------------------------------------------------
*/
class validatemail
{
var $config = array(
"stop_error" => 2,
"show_message" => 1,
"enable_dig" => 1
);
var $get = array(
"field" => 1,
"value" => 1,
"message" => 1,
"status" => 1
);
var $inf = array(
"dominio" => 1,
"email" => 1,
"usuario" => 1
);
function setConfig($config){
foreach ($config as $key => $value) {
if ($this->config[$key]){
$this->config[$key] = "$config[$key]";
}
}
}
function setGet($get){
foreach ($get as $key => $value) {
if ($this->get[$key]){
$this->get[$key] = "$get[$key]";
}
}
}
function setInf($inf){
foreach ($inf as $key => $value) {
if ($this->inf[$key]){
$this->inf[$key] = "$inf[$key]";
}
}
}
function stringLow($text){
$arrayLower=array('ç'
,'â','ã','à','á','ä'
,'é','è','ê','ë'
,'í','ì','î','ï'
,'ó','ò','ô','õ','ö'
,'ú','ù','û','ü');
$arrayUpper=array('Ç'
,'Â','Ã','Á','À','Ä'
,'É','È','Ê','Ë'
,'Í','Ì','Î','Ï'
,'Ó','Ò','Õ','Ô','Ö'
,'Ú','Ù','Û','Ü');
$arrayFinal=array('c'
,'a','a','a','a','a'
,'e','e','e','e'
,'i','i','i','i'
,'o','o','o','o'
,'u','u','u','u');
$text=strtolower($text);
$text=str_replace($arrayLower, $arrayFinal, $text);
$text=str_replace($arrayUpper, $arrayFinal, $text);
return $text;
}
function showMessage(){
if ($this->config['show_message']=="1"){
$get = $this->get['status'];
if ($get=="1"){
$msg = "OK ->";
}else{
$msg = "ERROR ->";
}
$message = $this->get['message'];
$value = $this->get['value'];
$field = $this->get['field'];
echo $msg." ".$message.' / Field:['.$field.'] Value:['.$value.']'."\n";
}
}
function stop(){
if ($this->config['stop_error']=="1"){
exit();
}
}
function chkLogin($login){
if (strlen($login)>32){
$get = array(
"field" => "usuario",
"value" => "$login",
"message" => "MAX LENGHT OF LOGIN IS 32",
"status" => "2"
);
$this->setGet($get);
$this->showMessage();
$this->stop();
return FALSE;
}else if (is_numeric(substr($login, 0, 1))){
$get = array(
"field" => "usuario",
"value" => "$login",
"message" => "THE FIRST CHAR IS NUMBER",
"status" => "2"
);
$this->setGet($get);
$this->showMessage();
$this->stop();
return FALSE;
}else{
$arrayIni=array(
'"','\'','','\\','!','#',
'$','%','¨','&','*',
'(',')','=','+','{','}',
'`','´','~','^',']','[',
',',':',';','/','?','|',' ','ñ',
'ç','â','ã','à','á','ä'
,'é','è','ê','ë'
,'í','ì','î','ï'
,'ó','ò','ô','õ','ö'
,'ú','ù','û','ü','Ç'
,'Â','Ã','Á','À','Ä'
,'É','È','Ê','Ë'
,'Í','Ì','Î','Ï'
,'Ó','Ò','Õ','Ô','Ö'
,'Ú','Ù','Û','Ü'
);
$arrayFinal=array();
$text=str_replace($arrayIni, $arrayFinal, $login);
if($text!=$login){
$get = array(
"field" => "usuario",
"value" => "$login",
"message" => "ILEGAL CHARS",
"status" => "2"
);
$this->setGet($get);
$this->showMessage();
$this->stop();
return FALSE;
}else{
return TRUE;
}
}
}
function chkDig($domain){
$return = shell_exec("dig ".$domain." +trace");
$lines = explode("\n",$return);
$cont = 0;
foreach ($lines as $line_num => $line) {
if (ereg('Received',$line)){
$cont++;
}
}
if ( $cont <= "3" ){
$get = array(
"field" => "dominio",
"value" => "$domain",
"message" => "DIG WARNING: INVALID DOMAIN",
"status" => "2"
);
$this->setGet($get);
$this->showMessage();
$this->stop();
return FALSE;
echo "aqui";
}else{
$inf = array(
"dominio" => "$domain"
);
$this->setInf($inf);
return TRUE;
}
}
function chkDomain($domain){
$inf = array(
"dominio" => "$domain"
);
$this->setInf($inf);
$domainlower = strtolower($domain);
$arrayIni=array(
'"','\'','','\\','!','#',
'$','%','¨','&','*',
'(',')','=','+','{','}',
'`','´','~','^',']','[',
',',':',';','/','?','|','@',
'ñ',
'ç','â','ã','à','á','ä'
,'é','è','ê','ë'
,'í','ì','î','ï'
,'ó','ò','ô','õ','ö'
,'ú','ù','û','ü','Ç'
,'Â','Ã','Á','À','Ä'
,'É','È','Ê','Ë'
,'Í','Ì','Î','Ï'
,'Ó','Ò','Õ','Ô','Ö'
,'Ú','Ù','Û','Ü'
);
$arrayFinal=array();
$newdomain=str_replace($arrayIni, $arrayFinal, $domain);
if($domain!=$newdomain){
$get = array(
"field" => "dominio",
"value" => "$domain",
"message" => "ILEGAL CHAR DOMAIN",
"status" => "2"
);
$this->setGet($get);
$this->showMessage();
$this->stop();
return FALSE;
}elseif (!is_string(substr($domainlower, 0, 1))){
$get = array(
"field" => "dominio",
"value" => "$domain",
"message" => "ILEGAL CHAR IN FIRST CHAR DOMAIN",
"status" => "2"
);
$this->setGet($get);
$this->showMessage();
$this->stop();
return FALSE;
}elseif($this->config['enable_dig']==1 and $this->chkDig($domainlower)){
return TRUE;
}else{
$get = array(
"field" => "email",
"value" => "$domain",
"message" => "INVALID DOMAIN",
"status" => "2"
);
$this->setGet($get);
$this->showMessage();
$this->stop();
return FALSE;
}
}
function chkEmail($email){
if (!empty($email)){
$field_email = explode('@',$email);
$email = $this->stringLow($email);
$usuario = $this->stringLow($field_email[0]);
$domain = $this->stringLow($field_email[1]);
$inf = array(
"email" => "$email",
"usuario" => "$usuario"
);
$this->setInf($inf);
if ((!empty($field_email['0']) and $this->chkLogin($field_email['0'])) and (!empty($field_email['1']) and $this->chkDomain($field_email['1']))){
$get = array(
"field" => "email",
"value" => "$email",
"message" => "VALIDATE SUCESSED!!!",
"status" => "1"
);
$this->get['status'] = "1";
$this->setGet($get);
$this->showMessage();
return TRUE;
}else{
return FALSE;
}
}else{
$get = array(
"field" => "email",
"message" => "EMPTY REQUIRE FIELD",
"value" => " ",
"status" => "2",
);
$this->setGet($get);
$this->showMessage();
$this->stop();
return FALSE;
}
}
}
$validatemail = new validatemail;
?>
<? // programa.php
require_once("validatemail.php");
/* CONFIGURAÇÃO */
$config = array(
/* Para o script caso de erro 1=Sim 2=Nao */
"stop_error" => 2,
/* Mostra mensagens 1=Sim 2=Nao */
"show_message" => 2,
/* Usa o programa DIG para validar 1=Sim 2=Nao */
"enable_dig" => 1
);
$validatemail->setConfig($config);
/* EXEC */
$email = "joaopaulo@deoliveira.com.br";
/* RETORNA INFORMACOES VALIDADAS e FORMATADAS*/
if($validatemail->chkEmail($email)){
$email = $validatemail->inf['email'];
$dominio = $validatemail->inf['dominio'];
$usuario = $validatemail->inf['usuario'];
$mensagem = $validatemail->get['message'];
echo "OK---------- $mensagem<br>";
echo "DOMINIO: $dominio<br>";
echo "USUARIO: $usuario<br>";
echo "EMAIL: $email<br>";
}else{
$email = $validatemail->inf['email'];
$dominio = $validatemail->inf['dominio'];
$usuario = $validatemail->inf['usuario'];
$mensagem = $validatemail->get['message'];
echo "ERROR---------- $mensagem<br>"
echo "DOMINIO: $dominio<br>";
echo "USUARIO: $usuario<br>";
echo "EMAIL: $email<br>";
echo "<pre>";
print_r($validatemail->get);
echo "</pre>";
}
?>
FormConstructor: Formulário Construído por Variável
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Programa fora de escala na tela do pc (38)
\Boot sem espaço em disco (Fedora KDE Plasma 42) (1)
Mint Xfce não mantém a conexão no wi-fi (2)









