Nivel: Principiante
Introducción:
Debido a que es una duda que ya ha aparecido varias veces y es algo que nos puede venir
muy bien en muchas ocasiones, me he decidido explicar la creación y el funcionamiento
de un script en PHP (www.php.net), para poder recoger una serie de campos en un formulario
y que toda esa información se nos envie al correo electrónico.
Lo que quiero conseguir con esto, con un mínimo de conocimiento en HTML (http://www.w3.org/MarkUp/) y
ningún conocimiento de PHP, logré realizar esto con éxito y de paso, aprende algunas cosillas.
Requisitos: http://es.php.net/mail
Localhost
·· En Linux necesitaremos de un cliente de correo, se aconseja Sendmail y tenerlo instalado en la ruta por defecto.
·· En Windows necesitaremos un servidor SMTP instalado en nuestro sistema, podeis usar el ArGoSoft que es muy fácil de configurar. (http://hostspain.net/smtp.html)
·· Servidor web (Apache, ISS, ...)
·· Módulo PHP 4.3x o superior, configurado en el servidor web.Hosting compartido
·· No se precisa de ninguna configuración generalmente, ya que suele venir corriendo Linux y Sendmail por defecto.
Funcionamiento:
El funcionamiento del script es muy simple, lo que hacemos es que tenemos un formulario, como cualquier otro, en
HTML, entonces mediante campos (< input> ) o campos de texto (<textarea> ), recogeremos la información que el navegante nos va a facilitar,
posteriormente, cuando el navegante pulse, toda esa información se la vamos a mandar a un script en PHP que va a ser el encargado de procesarla y
enviarla a través del servidor SMTP servidor.
Script:
Para no liarnos vamos a separar el HTML y el PHP en dos archivos, podriamos hacerlo sin ningún tipo de problema todo en el mismo archivo, pero quedaria un código menos claro.
En el ejemplo, vamos a realizar un formulario para que nos envien opiniones de nuestra web.
HTML
<form method="post" action="enviar.php">
<!-- Method es la manera de como se envia los datos, GET seria mediante URL y POST de una manera oculta (a través STDIO). Action indica la acción o archivo a ejecutar cuando el navegante pulse sobre Submit (Aceptar), en este caso ejecutamso "enviar.php" que contiene el script PHP que procesará y enviará el e-mail. -->
< input type="text" name="tu_nombre"> Escribe tu nombre.<br>
<!-- Type le decimos el tipo de campo que será y el navegaor lo mostrará de una forma u otra, puede ser: text, password, submit, reset, ... . Name simplente es el nombre del campo, es MUY IMPORTANTE tener bien específicado esto, sin espacios ni carácteres raros, porque luego con esto procesaremos el mensaje a través de las variables de PHP y es como conseguirmos el contenido de cada campo. -->
< input type="text" name="tu_asunto"> Escribe el asunto.<br>
< input type="text" name="tu_email"> Escribe el e-mail.<br>
<texarea name="tu_mensaje">Escribe tu mensaje</texarea><br>
<!-- Textarea es un campo de texto, el funcionamiento es un poco diferente, como veis, esta etiqueta si que tiene cierra en HTML (/textarea> ) y si queremos añadirle algo por defecto, solo tendremos que "encerrar" el texto que queramos: <textarea>TEXTO POR DEFECTO</textarea> -->
< input type="submit" value="Enviar e-mail">
<!-- type="submit" esto es algo nuevo, lo que hace es un botón ejecutable, que cuando hagas clic aceptará y mandará los datos del formulario hacia el "action" que tengamos puesto. -->
</form>
Teneis el código más limpito en: http://erdanblo.php5.cz/codigo_html.html
PHP
<?php // Abrimos el modo PHP
$nombre = stripslashes($_POST[tu_nombre]); //Con esto y lo siguiente lo que haremos es limpiar el contenido de los campos por si hay algo 'malicioso'.
function cad_limpia ($string) {
return trim(htmlentities(strip_tags($string)));
}
$nombre= cad_limpia($POST['tu_nombre']);
$asunto = cad_limpia($POST['tu_asunto']);
$email = cad_limpia($POST['tu_email']);
$mensaje = cad_limpia($POST['tu_mensaje']);
if( empty($POST['tu_nombre']) || empty($POST['tu_asunto']) || empty($POST['tu_email']) || empty($POST['tu_mensaje'])) { echo 'Hay campos incompletos, rellena todo los campos.'; }else{ // Abrimos un condicional con las condiciones, de que ningún campo esté vacio, en el caso de que algo esté vacio lanza el mensaje de error, si no, continua la ejecución del script.
// Ahora vamos a crear la forma en la que nos llegará el correo a nuestra e-mail y tal cual lo veremos.
$cuerpo = "
||============================
|| Nombre: $nombre [$email]
|| Asunto: $asunto
||============================
Mensaje: $mensaje
";
$destino = "[email protected]"; // Aqui vamos a poner nuestro correo electrónico, es decir, donde queramos recibir los mensajes desde web.
mail($destino, $asunto, $cuerpo, "Reply-To: $email;");
//Por fin la función que envia el correo, teneis la explicación aquí: http://php.grn.es/manual/es/function.mail.php , solo decir que el Reply-To es para que cuando en nuestro cliente de correo o algo, pulsemos sobre responder, automaticamente nos ponga el correo que pusieron en el formulario y no el correo del servidor web, que será el que no has enviado el correo "realmente".
}
?>
Teneis el código más limpito en: http://erdanblo.php5.cz/codigo_php.html
Ejemplo:
Teneis un ejemplo en: http://erdanblo.php5.cz con la única modificación del original, que el mensaje se envia al correo que pongais en el formulario.
(Tarda bastante en llegar el correo debido a que es un hosting gratuito.)
Enlaces:
www.php.net - Manual de PHP
www.apache.org - Página del servidor web.
www.aeoris.net - Embellecedor de código PHP
www.media-vida.net/vertema.php?fid=9&tid=1828828805 - Listado de hostings gratuitos
Nota:
Si vais a publicar este tutorial en otra web que no sea media-vida, dar mención del autor y página (www.media-vida.net) o mejor, dar la URL al tutorial.
Si teneis alguna duda/sugerencia/crítica, responder al post (educadamente).
Cambios:
Comillas en las variables $_POST.
Función de limpiar cadenas ( Autor: murpix - Web: http://213.194.149.215/whosegfx/tema/14/177/)