Em suma o cara "esqueceu" de tudo o que é obrigatório em um e-mail e o meu sistema aceitou este dado sem criticar...
Bom.. Para evitar que novos "experts" em fake-e-mail se cadastrassem desta forma, implementei uma funçãozinha que verifica se o texto fornecido tem uma sintaxe válida para ser usado como um endereço de e-mail.
A função é a seguinte:
//isEmailValido verifica se um email está no formato correto (xxx@bbb.ccc). Caso $ignoreempty seja
//false, retornará false se $email for uma string vazia
function isEmailValido($email, $ignoreempty = true)
{
$result = false;
if(strlen(trim($email))==0 && $ignoreempty)
$result = true;
elseif(preg_match("/^[\w\.-]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]+$/i", $email))
$result = true;
return $result;
}
exemplo de uso: EmailDomainValid( "email@dominio.com.br ").
*/
function EmailDomainValid($email)
{
if(!preg_match ("/^[\w\.-]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]+$/", $email))
return false;
list($prefix, $domain) = explode("@",$email);
if(function_exists("getmxrr") && getmxrr($domain, $mxhosts))
{
foreach($mxhosts as $mx)
{
if(@fsockopen($mx, 25, $errno, $errstr, 10))
return true;
}
return false;
}
elseif(@fsockopen($domain, 25, $errno, $errstr, 10))
{
return true;
}
return false;
}
//false, retornará false se $email for uma string vazia
function isEmailValido($email, $ignoreempty = true)
{
$result = false;
if(strlen(trim($email))==0 && $ignoreempty)
$result = true;
elseif(preg_match("/^[\w\.-]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]+$/i", $email))
$result = true;
return $result;
}
Tudo caminhava muito bem... Mas os problemas não pararam por aí...
Quando o usuário colocava um e-mail com domínio inexistente (por exemplo "meuemail@dominioinexistente.com.br"), o código acima deixava passar numa boa.
Pra isto eu dei uma vasculhada na net, achei diversas funções que se propunham a resolver este problema... Juntei um pedaço de cada um e montei a função abaixo:
/** EmailDomainValid verifica se o domínio do email fornecido existe é válido.
exemplo de uso: EmailDomainValid( "email@dominio.com.br ").
*/
function EmailDomainValid($email)
{
if(!preg_match ("/^[\w\.-]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]+$/", $email))
return false;
list($prefix, $domain) = explode("@",$email);
if(function_exists("getmxrr") && getmxrr($domain, $mxhosts))
{
foreach($mxhosts as $mx)
{
if(@fsockopen($mx, 25, $errno, $errstr, 10))
return true;
}
return false;
}
elseif(@fsockopen($domain, 25, $errno, $errstr, 10))
{
return true;
}
return false;
}
Desde então os problemas com e-mails cadastrados praticamente deixaram de existir :-)
Nenhum comentário:
Postar um comentário