[ Foro de PHP ]

Duda formulario email

21-Sep-2011 19:24
Alejandro Diaz
7 Respuestas

Buenas, estoy empezando a mirarme el tema del PHP y bueno estoy intentando hacer un formulario muuuuuuy sencillo que se envie a un correo.

Para empezar le e dado mil vueltas por internet pero no consigo remediar el error que es este...

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Curso PHP\htdocs\practicasPHP\saludador2.php on line 6

Mirando por internet la respuesta es que no tengo bien configurado el php.ini o el SMTP, pues bien no se que son ninguna de las dos cosas.

Por si sirve de algo este es el codigo...

codigo html envia2.html

<html>
<body>
 <form method="post" action="saludador2.php">
   Email: <input name="correo" type="text"> <br>
   Comentario: <br>
   &nbsp;&nbsp;<textarea rows="10" name="texto" cols="40"></textarea>
       <br>
   <input value="Enviar" type="submit"><br>
  </form>  
</body>
</html>

codigo php saludador2.php

<html>
<body>
<?php
 $remitente = $_REQUEST['correo'];
 $texto = $_REQUEST['texto'];  
 mail("alexss-db@hotmail.com","Prueba formulario",$texto,"From: $remitente");
?>
</body>
</html>


24-Sep-2011 21:29
Nacho Cabanes (+84)

Bienvenido, Alejandro.

En primer lugar, perdona el retraso en contestar, pero son malas fechas para mí, no sólo por el exceso de trabajo sino por problemas familiares.

En segundo lugar, el detalle importante, que no dices pero que puedo imaginar, es qué entorno usas. Si hablas de "C:..." imagino que será un algún WAMP (Windows + Apache + MySQL + PHP), es decir, Windows con algún añadido como XAMPP, Uniform Server o EasyPHP.

En ese caso, el problema será casi con toda seguridad que el paquete que has instalado no incluye servidor SMTP (Simple Mail Transfer Protocol).

¿Alternativas?  Si tienes acceso a un servidor de Internet, en el que tengas alojada alguna página web (tú o algún amigo/familiar), prueba a reservarte una carpeta para hacer pruebas. Casi seguro que ahí sí funcionará.

Si no tuvieras acceso a un servidor "real", podrías probar a configurarte uno "de mentira", instalando un Linux en un sistema de virtualización como VirtualBox y asegurándote de que instalas Apache, PHP, MySQL... y SMTP. En sistemas amigables como Ubuntu debería ser casi trivial. Aun así, al no tener un "nombre de dominio" real, es fácil que aunque los mensajes llegaran a salir de tu servidor, muchos gestores de correo (especialmente los más radicales, como Hotmail) bloquearan los mensajes, al considerarlos Spam por no tener un remitente reconocido.

Suerte!


24-Sep-2011 21:43
Alejandro Diaz

Bueno la duda esta resuelta, una vez subido al servidor si me funcionaba :S

Ahora me surge otra duda que tampoco consigo remediar...
Tengo este código que lo llama desde un html...

<?php
header ("Location: http://localhost/practicasPHP/pruebaphp/contacto.html");
session_start();
if ($_POST['action'] == "checkdata") {
   if ($_SESSION['tmptxt'] == $_POST['tmptxt']) {
       echo "El formulario se ha enviado correctamente.".$_POST['nombres'];
       $remitente = $_REQUEST['correo'];
       $texto = $_REQUEST['texto'];  
       mail("iligraf@iligraf.com","Prueba formulario",$texto,"From: $remitente");

   } else {
       echo "Error, no se ha enviado el formulario, asegurese de introducir correctamente el codigo de verificación.";
   }
   sleep(3);
   echo '<a href="cotacto.html">';
   exit;
}
?>

Lo que quiero es que me verifique la captcha si esta bien,te sale un mensaje como que se ha enviado y envía el formulario, si no te da el mensaje como que no esta bien y ya sea una cosa u otra que me redireccione a la pagina que yo le diga...
Pues bien, no entiendo por que envía o no el formulario pero no muestra los mensajes.


24-Sep-2011 21:54
Alejandro Diaz

Se me ha olvidado decir se que no me lo muestra por lo de...

sleep(3);
echo '<a href="cotacto.html">';

Pero lo que no entiendo es... si el if lo hace antes porque no muestra el mensaje?
Hace el if y me lo redirecciona aunque este el sleep()?
Tambien he intentado con header para redireccionar pero me dice que no puedo modificar el header... esto del php me está matando xD


25-Sep-2011 00:32
Alejandro Diaz

Bueno yo solo me contesto.

Me funciona ya como quería he cambiado lo del sleep() y echo '<a href="cotacto.html">'; por esto...

<?php
session_start();
if ($_POST['action'] == "checkdata") {
   if ($_SESSION['tmptxt'] == $_POST['tmptxt']) {
       echo "El formulario se ha enviado correctamente.".$_POST['nombres'];
$remitente = $_REQUEST['correo'];
$empresa = $_REQUEST['empresa'];
$texto = "Nombre: ".$_REQUEST['nombre']."  Asunto: ".$_REQUEST['texto'];  
mail("iligraf@iligraf.com",$empresa,$texto,"From: $remitente");

   } else {
       echo "Error, no se ha enviado el formulario, asegurese de introducir correctamente el codigo de verificación.";
   }

echo "<META HTTP-EQUIV='Refresh' CONTENT='4; url=http://www.iligraf.com/contacto.html'>";
   exit;
}
?>


Realmente no se si de esta forma es una traperada o no el caso es que me funciona pero...eso.


01-Oct-2011 19:47
Nacho Cabanes (+84)

Veo que "casi te has contestado tú mismo".  ;-)

Aun así, no tiene sentido usar "sleep" en un lenguaje como PHP, en el que hay un servidor que tiene que devolver una respuesta, y un cliente (el navegador web) que puede considerar el resultado de esa espera como un "timeout" (tiempo de espera excesivo).

Por eso, lo ideal es que en vez de "este fuente no funcione", lo plantees como "quiero hacer esto, y lo he intentado de esta forma", porque sin saber lo que persigues, es difícil poder aconsejarte.

Yo he hecho cosas parecidas a lo que creo que pretendes conseguir ;-)  pero la temporización para recargar la página original o para saltar a otra página la he hecho desde Javascript.


02-Oct-2011 01:09
Alejandro Diaz

Puede ser que no me haya explicado jaja
Haber yo tengo un html con un formulario que tiene una captcha, y tengo otro archivo php que me verifica esta captcha, si es correcta me lo envía y deja el mensaje como que se ha enviado, y si no pues no lo envía y deja el mensaje que no lo ha enviado, pero se queda la pantalla en blanco con el mensaje y ya.
Entonces lo que yo pretendía que desde el php me redireccionara a mi pagina html y no se quedara la pagina en blanco con el mensaje.
Pero no conseguía que se mostrara el mensaje y a los 2 o 3 segundos  redireccionara y de esta forma si lo hace.


10-Oct-2011 20:21
Nacho Cabanes (+84)

Por cierto, Alejandro, una cosa que tienes que tener en cuenta: aunque hagas una redirección (típicamente con Javascript), pon en la página un enlace después del mensaje, de forma que si algún navegador no permite Javascript, el usuario pueda hacer clic en el enlace para saltar a la página que tú quieres.

Piensa que quizá un dispositivo móvil no incluya Javascript, o que el usuario puede deshabilitarlo, y entonces se quedaría parado en esa página en blanco. Es más amigable darle al menos la opción de seguir.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)