Hola Amigos:
Muchas veces me ha ayudado el foro a solucionar problemas varios pero en esta ocasión no veo que va mal en ell código ni encuentro solución en el foro, espero que me podáis echar un cable.
A grandes rasgos... el PHP es llamado desde un submit en un HTML; toma unos datos del formulario, extrae la IP del usuario y manda 3 correos, 2 de ellos son para el equipo de programación y un tercero es a la cuenta del usuario. Pues bien, en ocasiones el PHP manda datos correctos, como estos, a las cuentas de los programadores:
ATENCION: Antes de dar respuesta verificar con el panel de control si ha confirmado la consulta desde su bandeja de correo.
IP del usuario: 84.121.79.41
* Envia: jose maria XXXXXXXX
* E-mail: [email protected]
* Asunto: Empleo
* Mensaje: Habiendo leido que habria alguna vacante de empleo publico quisiera preguntarles la posiblidad de poder acceder a ellas. Si son tan amables de enviarme las bases. Gracias.
Y en ocasiones manda esto (aunque en el HTML se validan correctamente que todos los datos solicitados tengan un mínimo de longitud y un email correcto con usuario+@+dominio+. y 2 o 3 caracteres)
ATENCION: Antes de dar respuesta verificar con el panel de control si ha confirmado la consulta desde su bandeja de correo.
IP del usuario: 92.82.234.94
* Envia:
* E-mail:
* Asunto:
* Mensaje:
El código del PHP es el siguiente:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP formulario de contacto</title>
</head>
<?php
//Optención de IP REAL.
function getRealIP(){
if( $_SERVER['HTTP_X_FORWARDED_FOR'] != '' ) {
$client_ip = ( !empty($_SERVER['REMOTE_ADDR']) ) ?
$_SERVER['REMOTE_ADDR']
:
( ( !empty($_ENV['REMOTE_ADDR']) ) ?
$_ENV['REMOTE_ADDR']
:
"unknown" );
// los proxys van añadiendo al final de esta cabecera
// las direcciones ip que van "ocultando". Para localizar la ip real
// del usuario se comienza a mirar por el principio hasta encontrar
// una dirección ip que no sea del rango privado. En caso de no
// encontrarse ninguna se toma como valor el REMOTE_ADDR
$entries = preg_split('/[, ]/', $_SERVER['HTTP_X_FORWARDED_FOR']);
reset($entries);
while (list(, $entry) = each($entries)) {
$entry = trim($entry);
if ( preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list) ) { // http://www.faqs.org/rfcs/rfc1918.html
$private_ip = array(
'/^0\./',
'/^127\.0\.0\.1/',
'/^192\.168\..*/',
'/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/',
'/^10\..*/');
$found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
if ($client_ip != $found_ip) {
$client_ip = $found_ip;
break; } } } }
else {
$client_ip = ( !empty($_SERVER['REMOTE_ADDR']) ) ?
$_SERVER['REMOTE_ADDR']
:
( ( !empty($_ENV['REMOTE_ADDR']) ) ?
$_ENV['REMOTE_ADDR']
:
"unknown" ); }
return $client_ip; }
//levanto las los datos a traves de variables
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto'];
$consulta = $_POST['consulta'];
$ip = getRealIP();
// armo los mails con la info levantada
mail('[email protected]', 'Consulta desde el formulario Web', "* Envia: $nombre \r\n* E-mail: $email \r\n\r\n* Asunto: $asunto \r\n\r\n* Mensaje: $consulta", "From: $email \r\n\r\n ATENCION: Antes de dar respuesta verificar con el panel de control si ha confirmado la consulta desde su bandeja de correo. \r\n IP del usuario: " .$ip );
mail('[email protected]', 'Consulta desde el formulario Web', "* Envia: $nombre \r\n* E-mail: $email \r\n\r\n* Asunto: $asunto \r\n\r\n* Mensaje: $consulta", "From: $email \r\n\r\n ATENCION: Antes de dar respuesta verificar con el panel de control si ha confirmado la consulta desde su bandeja de correo. \r\n IP del usuario: " .$ip );
mail($email, 'Su consulta desde el formulario Web:', "* Envia: $nombre \r\n* E-mail: $email \r\n\r\n* Asunto: $asunto \r\n\r\n* Mensaje: $consulta", "From: $email \r\n\r\n Gracias por usar este servicio, en breve le daremos respuesta.");
// Una vez que se envia, vuelvo al formulario ancunciando que los datos se enviaron
echo "<script>history.back(alert(\"Su consulta se ha mandado y está siendo procesada, gracias.\"));</script>";
echo "<script>window.close();</script>";
?>
<body>
</body>
</html>
Saludos y gracias por vuestra ayuda.