Hey eres un genio repara2, tu función de validación del mail es buenísima jeje me la leí entera y la implemente con este código:
Cita: function validareMail($xEmail){
$xValid = true;
$atPos = strrpos($xEmail, '@');
//Si $atPos es booleana Y es falso entonces no es email
if(is_bool($atPos) && !$atPos){
$xValid = false;
}else{
$xDomain = substr($xEmail, $atPos+1);
$xAddr = substr($xEmail, 0, $atPos);
$xAddrLen = strlen($xAddr);
$xDomainLen = strlen($xDomain);
//La dirección ha de ser >1 y <64
if ($xAddrLen < 1 || $xAddrLen > 64){
$xValid = false;
//el dominio >1 y <64
}else if ($xDomainLen < 1 || $xDomainLen > 255){
$xValid = false;
}else if ($xAddr[0] == '.' || $xAddr[$xAddrLen-1] == '.'){
$xValid = false;
//No puede contener barras // o \\
}else if (preg_match('/\\.\\./', $xAddr)){
$xValid = false;
}else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $xDomain)){
$xValid = false;
}else if (preg_match('/\\.\\./', $xDomain)){
$xValid = false;
}else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$xAddr))) {
if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$xAddr))){
$xValid = false;
}
}
//Debe existir el dominio
if ($xValid && !(checkdnsrr($xDomain,'MX') || checkdnsrr($xDomain,'A'))){
$xValid = false;
}
}
return $xValid;
}
[...]
$indicador = "";
if(!validareMail($remitente)){
$indicador = "false";
}
else{
$indicador = "true";
}
if($error == "" && $indicador == "true"){
mail($destino, $asunto, $mensaje, $encabezados) or die ("Mensaje no enviado");
echo "Mensaje enviado";
} elseif ($indicador == "false"){
echo "Email erroneo";
} else{
echo $error;
}
Ojo aquí lo que se ve es como he adherido a mi código la función de repara2 usando la variable $indicador.
EL asunto práctico resulta así al final: si el email es erroneo aparece un mensaje indicándolo, si es correcto y faltan campos por rellenar, aparece un mensaje indicando que hay campos vacíos.