8 de mayo de 2011

Enviar un Formulario con PHP a un Correo Electrónico


En este ejercicio vamos a crear un pequeño formulario, para que los usuarios puedan enviar sus comentarios y los datos que introduzca el usuario en el formulario llegarán a través de un correo electrónico, para ello vamos a usar la función mail de PHP. Esta función necesita unos parámetros que se pasarán a través de unas variables. Estos estos parámetro y variables son:

mail($para, $asunto, $mensaje, $cabecera);

  1. $para: esta variable indicar a quien le va a llegar el e-mail.
  2. $asunto: esta variable contendrá el asunto del e-mail y es opcional.
  3. $mensaje: esta variable contiene el texto del comentario del usuario y que llegará al correo electrónico.
  4. $cabecera: esta variable contiene el tipo de cotejamiento, modo de cómo se van a transferir los datos, MIME (Multipurpose Internet Mail Extensions, es decir, Extensiones de Correo Internet Multipropósito), que son una serie de especificaciones dirigidas al intercambio a través de Internet, es decir, los tipo de archivos (texto, audio, vídeo, etc.) de forma transparente para el usuario. Además una parte importante del MIME está dedicada a mejorar las posibilidades de transferencia de texto en distintos idiomas y alfabetos. Este parámetro es opcional.

Vamos a explicar como hemos realizado el ejercicio para que los datos del usuario lleguen por correo al destinatario.

Lo primero es crear el formulario, dentro de la página contacto.html, usando la etiqueta HTML <form></form> con los siguientes atributos:

  • name="form1": Este atributo indica el nombre con el que vamos a identificar el formulario.
  • action="v_contacto.php": Este atributo se usa para indicar al formulario que acción debe de realizar con los datos de los campos del formulario.
  • method="post": Este atributo se usa para indicar al formulario que método se usará para enviar los datos de los campos del formulario.
  • enctype="multipart/form-data": Este atributo se usa para indicar al formulario el tipo de encriptación que irán los datos que se envían.

Otra cosa muy importante que debemos que tener en cuenta, en nuestra página de contacto.html, para que cuando lleguen la información al correo electrónico de destino sea legible, sobretodo si el usuario ha introducido acentos, eñes, interrogaciones (¿?), exclamaciones (¡!) o otros caracteres especiales, es el cotejamiento de nuestra página HTML, con la etiqueta <meta />, que debe ser:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Esta etiqueta se introducirá en la cabecera del documento HTML, entre las etiquetas <head></head>.

Una ver realizado el formulario crearemos el documento v_contacto.php, que es el que realizará la acción de enviar los datos del formulario a los correo electrónicos que indiquemos en la variable $para.

Este documento no tendrá ninguna etiqueta HTML, por lo que quedará de la siguiente manera:

<?php

/*Aquí recogemos los valores del los campos del formulario, que se identifican con el atributo name de cada campo del formulario y se asigna el valor a una variable de PHP, mediante el método que se definió en el formulario que en este caso es POST.*/

$nombre=$_POST['nombre'];
$email=$_POST['email'];
$consulta=$_POST['consulta'];

/*En la cabecera del email: indicaremos una serie de paramentos, como MIME que explicamos anteriormente para la definición del lenguaje, el cotejamiento y para quien va el e-mail. */

$cabecera = "MIME-Version: 1.0" . "\r\n";
$cabecera.= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$cabecera.= "From ".$para."\r\n";

/*Destinatarios y asunto de email:*/

$para = “tucorreo@dominio.com, otrocorreo@dominio1.com, etc…”;
$asunto = “Consulta del formulario de la Web”;

/*En el cuerpo del mensaje: estarán la variable que contiene el mensaje que vamos a recibir por e-mail, y se creará a partir de varios valores que iremos concatenando para así formar el mensaje que vamos a recibir.*/

$mensaje = "Este mensaje fue enviado por: ".$nombre."\r\n";
$mensaje .= "El e-mail es: ".$email."\r\n";
$mensaje .= "Mensaje: \r\n\n".$consulta."\r\n\n";

/*Este apartado del mensaje es para indicar al usuario que reciba el mensaje la fecha en la que se envió la información a través del formulario, para ello usaremos la función date() y time(), como ves en el ejercicio:*/

$mensaje .= "Fecha del envío: ".date('d/m/Y', time());

/*Función mail de PHP: que es la que enviará el correo electrónico. Si todo es correcto:*/
if(mail($para, $asunto, $mensaje, $cabecera)){

/*La variable $error vale 1 y se enviará este valor con la función header(“Location:….”); que nos reenviará al documento contacto.php, con el valor de la variable $error que se enviará mediante el método GET>.*/

$error=1;
header("Location:contacto.php?error=$error");
}

/*En caso contrario:*/

else{

/*La variable $error vale 0 y se enviará este valor con la función header(“Location:….”); y nos reenviará al documento contacto.php, con el valor de la variable $error que se enviará mediante el método GET.*/

$error=0;
header("Location:contacto.php?error=$error");
}
?>

El documento contacto.php, es igual que el documento contacto.html, pero no tiene el formulario, y al principio de este documento y fuera de las etiquetas <HTML> </HTML>, ser recogerá el valor de la variable $error que se ha pasado por el método GET y dependiendo del valor que tenga se mostrará un mensaje de error dentro del documento contacto.php. Ejemplo:

<?php
if ($_GET['error']==1) $error='<div>Se ha enviado correctamente, gracias por su colaboraci&oacute;n.</div>';
else $error='<div style="color:#FF0000";>No se ha enviado correctamente, inténtelo de nuevo y perdone las molestias.</div>';
?>

Resumiendo, como hemos visto los datos del formulario se envía al documento v_contacto.php, este envía los datos tratados a los correos electrónicos que se le indiquen , y mediante la función header("Location:contacto.php?error=$error"); se abrirá la página contacto.php y mostrará el valor de la variable $error que se ha enviado a través del método GET, si todo ha ido correctamente, la variable $error tendrá el valor 1, mostrará un mensaje y si el valor de la variable $error es 0 mostrará otro mensaje al usuario.

El proceso que hemos explicado lo mostraremos mediante un gráfico para intentar resolver las dudas que hubiesen surgido:




Espero que os sea de ayuda a todos un saludo:

Antonio

No hay comentarios:

Publicar un comentario

No olvides dejar tu comentario y gracias por tu tiempo ;-)