1. ¡OFERTA! con cupón "DIRVPS": hosting por $0,01 y también VPS Linux y Windows por $0,01 el primer mes por Interserver ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

Problema funcion mail php

Tema en 'Programación y Diseño Web' iniciado por kuert, 29 Jun 2009.

  1. kuert

    kuert Nuevo usuario

    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 = '[email protected]';
    $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
     
  2.  
  3. kuert

    kuert Nuevo usuario

    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!
     
  4. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    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,
     
  5. MaxKiller

    MaxKiller Usuario activo

    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á.
     
  6. kuert

    kuert Nuevo usuario

    HOla buenas,


    Con que funcion se podria hacer esto?

    Podrias ponerme una muestra de codigo?


    Gracias otra vez!

    Saludos!
     
  7. MaxKiller

    MaxKiller Usuario activo

  8. vicram

    vicram Usuario activo

    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.

    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';
    }

     
  9. kuert

    kuert Nuevo usuario

    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 = '[email protected]';
    $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
     
  10. turbex

    turbex Usuario activo

    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:
    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 '[email protected]';
    $asunto 'Contacto desde web Marbel';

    $result = @mail($para$asuntoutf8_decode($mensaje), $header);

    if(
    $result) echo '&exito=true&';
    else echo 
    '&exito=false&';

    ?>
     
  11. kuert

    kuert Nuevo usuario

    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!
     
  12. HostingDN

    HostingDN Usuario activo

    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:

    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
     
  13. kuert

    kuert Nuevo usuario

    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
     


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


    
    
    
    
Blog · Sitios amigos: GuiaHosting · Unidominios · Interalta ·