29-jun-2009, 23:46
|
#1 (permalink)
|
|
Usuario activo
Fecha de Ingreso: abril-2009
Mensajes: 22
|
Problema funcion mail php
Hola buenas,
He creado un formulario de contacto con flash, el qual se envia con la funcion mail de php pasandle los parametros desde php.
Este es el código php que tengo:
<?php
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$mail = $_POST['email'];
$telefono = $_POST['telefono'];
$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";
$mensaje = "Este mensaje fue enviado por " . $nombre . " " . $apellidos . ", con telefono " . $telefono . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());
$para = 'kkuertt@hotmail.com';
$asunto = 'Contacto desde web Marbel';
mail($para, $asunto, utf8_decode($mensaje), $header);
echo '&exito=true&';
?>
Como veis al final devuelve un parametro para saber si se ha enviado correctamente.
El caso es que si lo ejecuto a mi pc si que funciona, es decir me devulve exito como true y me sale el mensaje como si se hubiera mandado bien, aunque no se mande porque no tengo instalado php en mi pc, pero cuando lo pongo en el hosting ni me devuelve exito como true.
Sabeis a que puede ser debido?
Gracias
|
|
|
30-jun-2009, 00:16
|
#2 (permalink)
|
|
Usuario activo
Fecha de Ingreso: abril-2009
Mensajes: 22
|
Hola buenas,
Ya me funciona, pero he podido observar es que si alguien consigue saber la url hacia mi archivo php puede bombardearme de correos sin mas...
Es decir si yo pongo en mi navegador ww.......es/enviar_mail.php siendo esa la ruta asta el archivo php se envia el correo sin mas...
Hay alguna forma de dar mas seguridad a eso?
Gracias foreros!
|
|
|
30-jun-2009, 01:44
|
#3 (permalink)
|
|
Moderador
Fecha de Ingreso: febrero-2006
Ubicación: Planeta Tierra
Mensajes: 6.134
|
Hay formas de "proteger" (con código) un archivo PHP para que no puedan acceder directamente con la ruta. Y también hay formas de protegerlo con medidas básicas anti-spam y de protección para que no te lo utilicen para enviar spam.
Busca en la documentación de PHP. Yo no sabría decirte, pues lo mío no es la programación.
Saludos,
|
|
|
30-jun-2009, 11:31
|
#4 (permalink)
|
|
Usuario activo
Fecha de Ingreso: febrero-2009
Ubicación: Cataluña, España.
Mensajes: 1.125
|
Puedes hacer una comprobación en el referer con un "if".
Si el acceso al archivo PHP no viene desde la URL que especifiques, no se ejecutará.
|
|
|
30-jun-2009, 13:55
|
#5 (permalink)
|
|
Usuario activo
Fecha de Ingreso: abril-2009
Mensajes: 22
|
Cita:
Iniciado por MaxKiller
Puedes hacer una comprobación en el referer con un "if".
Si el acceso al archivo PHP no viene desde la URL que especifiques, no se ejecutará.
|
HOla buenas,
Con que funcion se podria hacer esto?
Podrias ponerme una muestra de codigo?
Gracias otra vez!
Saludos!
|
|
|
30-jun-2009, 16:51
|
#7 (permalink)
|
|
Usuario activo
Fecha de Ingreso: junio-2009
Mensajes: 121
|
este es un codigo q uso muchas veces siempre y cuando se mi IP, a ti te dejo la posibilidad de implementar la lecura de la ip en una BBDD.
Código PHP:
/*
* SEGURIDAD DE ACCESO
*/
function Saber_IP() {
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
$ip = getenv("HTTP_CLIENT_IP");
}
elseif(getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
}
elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
$ip = getenv("REMOTE_ADDR");
}
elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
$ip = $_SERVER['REMOTE_ADDR'];
}
else {
$ip = "Unknown";
}
return $ip;
}
$ipClient = Saber_Ip();
if ($ipClient == "127.0.0.0") {
// si se mi ip la comparo si es esa realizo el codigo a mostrar
} else {
echo 'no tienes permisos';
}
|
|
|
30-jun-2009, 19:35
|
#8 (permalink)
|
|
Usuario activo
Fecha de Ingreso: abril-2009
Mensajes: 22
|
Hola muchas gracias a los dos por vuestra ayuda.
Pero he puesto este codigo que parece que esta bien, pero no me funciona.
<?php
echo '&exito=false&';
if ( eregi ( "w w w.marbelamposta.es", $_SERVER['HTTP_REFERER'] ) )
{
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$mail = $_POST['email'];
$telefono = $_POST['telefono'];
$ciudad = $_POST['ciudad'];
$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";
$mensaje = "Este mensaje fue enviado por " . $nombre . " " . $apellidos . ", con telefono " . $telefono . " de la ciudad " . $ciudad . "\r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());
$para = 'kkuertt@hotmail.com';
$asunto = 'Correo desde formulario de contacto de la web Marbel';
mail($para, $asunto, utf8_decode($mensaje), $header);
echo '&exito=true&';
} else {
echo 'no tienes permisos';
}
?>
Sabeis que puede ser?
Muchas Gracias
|
|
|
01-jul-2009, 20:36
|
#9 (permalink)
|
|
Usuario activo
Fecha de Ingreso: agosto-2008
Mensajes: 54
|
pregunta:
¿en tu host tienes habilitada la funcion mail de PHP ?
me tocó una vez un cliente que tenía un host, pero que el tema de los correos se lo hacían con google apps, y tenian deshabilitada la función "mail" de PHP.
en tal caso... prueba esto ... quizás funcione:
Código PHP:
<?php
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$mail = $_POST['email'];
$telefono = $_POST['telefono'];
$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";
$mensaje = "Este mensaje fue enviado por " . $nombre . " " . $apellidos . ", con telefono " . $telefono . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());
$para = 'kkuertt@hotmail.com';
$asunto = 'Contacto desde web Marbel';
$result = @mail($para, $asunto, utf8_decode($mensaje), $header);
if($result) echo '&exito=true&';
else echo '&exito=false&';
?>
|
|
|
01-jul-2009, 21:35
|
#10 (permalink)
|
|
Usuario activo
Fecha de Ingreso: abril-2009
Mensajes: 22
|
Cita:
Iniciado por turbex
pregunta:
¿en tu host tienes habilitada la funcion mail de PHP ?
me tocó una vez un cliente que tenía un host, pero que el tema de los correos se lo hacían con google apps, y tenian deshabilitada la función "mail" de PHP.
en tal caso... prueba esto ... quizás funcione:
Código PHP:
<?php
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$mail = $_POST['email'];
$telefono = $_POST['telefono'];
$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";
$mensaje = "Este mensaje fue enviado por " . $nombre . " " . $apellidos . ", con telefono " . $telefono . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Mensaje: " . $_POST['mensaje'] . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());
$para = 'kkuertt@hotmail.com';
$asunto = 'Contacto desde web Marbel';
$result = @mail($para, $asunto, utf8_decode($mensaje), $header);
if($result) echo '&exito=true&';
else echo '&exito=false&';
?>
|
Hola,
Si si la funcion mail me funciona, sino pongo nada para controlar la seguridad si me envia el correo, es al poner el if para comprobar que se ejecuta desde el servidor que no me funciona.
Saludos!
|
|
|
03-jul-2009, 02:36
|
#11 (permalink)
|
|
Usuario activo
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 436
|
Podrias colocar algo simple como esto (no es lo mejor pero es algo basico):
1. Coloca un nombre al boton enviar, asi como lo haces con los cuadros de texto, por ejemplo submit (lo mas comun)
2. En tu codigo coloca lo siguiente:
Código PHP:
$submit = $_POST["submit"];
if( isset($submit) )
{
// aqui va todo tu codigo de envio de mail
}
else
{
// no se un mensaje de no se pudo enviar el mail o simplemente dejalo en blanco para que no mande nada
}
Esto podria ser algo muy simple que puedes hacer, otra cosa que puedes hacer es validar que todos los campos se reciban, si no se reciben que no haga nada, igual ocupa el isset
|
|
|
03-jul-2009, 17:44
|
#12 (permalink)
|
|
Usuario activo
Fecha de Ingreso: abril-2009
Mensajes: 22
|
A ver, ya se de donde viene el problema.
El caso es que si pongo un if controlando alguna de las cosas que me habeis dicho, si funciona si llamo directamente el php, pero si lo llamo desde el formulario, que esta echo utilizando flash con la funcion sendAndLoad("enviar_mail.php", envio, "POST"); entonces no funciona.
O sea que es algo de la conexion flash con php, que sino controlo nada si se manda el mail pero si controlo algo con un if no funciona llamando desde flash, pero ejecutando el php directamente si.
Sabeis qe puede ser?
Gracias
|
|
|
| Herramientas |
|
|
| Desplegado |
Mode Lineal
|
Normas de Publicación
|
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes
El Código HTML está Desactivado
|
|
|
La franja horaria es GMT +1. Ahora son las 17:38.
|
La comunidad dedicada al web hosting más grande en nuestro idioma.
Para anunciar en ComunidadHosting, o para información general, por favor utiliza el formulario de contacto.
|