Php: enviar formulario con mail ()

formulario
Este artículo ha sido actualizado a fecha 17 de Marzo de 2011 con la intención de poder resolver algunas de las dudas que me planteáis a través de los comentarios y emails recibidos, si alguien no ha recibido respuesta me disculpo y espero que entendáis que no siempre tengo tiempo para contestaros, aunque me gustaría y agradezco mucho vuestros comentarios.

Si queremos incluir un formulario de contacto en nuestra página web tenemos que tener en cuenta que trabaja con el lenguaje de programación PHP, por lo tanto:

– Solo funcionará si nuestra web está alojada en un servidor que lo soporte (tenéis que ver las características de vuestro alojamiento). Aquí tenéis uno.

– Si trabajáis en un servidor local (en vuestra máquina), tenéis que tener instalado un servidor smtp, para que envíe el email.

– Necesitáis tener unos conocimientos mínimos de PHP, o por lo menos ganas de aprender. Al menos que sepáis que el archivo en el que queráis que se ejecute el php tiene que tener extensión .php (no .html), por ejemplo: formulario.php.

Teniendo en cuenta estos tres puntos básicos, ya podemos ver el código completo de nuestro formulario:

<?php
if (!isset($_POST['email'])) {
?>
  <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
    <label>
      Nombre:
      <input name="nombre" type="text" />
    </label>
    <label>
      Teléfono:
      <input name="telefono" type="text" />
    </label>
    <label>
      Email:
      <input name="email" type="text" />
    </label>
    <label>
      Mensaje:
      <textarea name="mensaje" rows="6" cols="50"></textarea>
    </label>
    <input type="reset" value="Borrar" />
    <input type="submit" value="Enviar" />
  </form>
<?php
}else{
  $mensaje="Mensaje del formulario de contacto de nnatali.com";
  $mensaje.= "\nNombre: ". $_POST['nombre'];
  $mensaje.= "\nEmail: ".$_POST['email'];
  $mensaje.= "\nTelefono: ". $_POST['telefono'];
  $mensaje.= "\nMensaje: \n".$_POST['mensaje'];
  $destino= "tuemail@loquesea.com";
  $remitente = $_POST['email'];
  $asunto = "Mensaje enviado por: ".$_POST['nombre'];
  mail($destino,$asunto,$mensaje,"FROM: $remitente");
?>
  <p><strong>Mensaje enviado.</strong></p>
<?php
}
?>

Ahora un poquito de explicación:

Con el condicional del principio del código (if…) conseguimos que en un primer momento se muestre el formulario de contacto y al enviar los datos (cuando pulsen sobre el botón enviar) desaparezca el formulario, se ejecute el código (else..) y muestre un mensaje.

Si queremos que el formulario no desaparezca, simplemente tendríamos que colocarlo fuera del if.

El atributo action de la etiqueta form indica a donde tiene que dirigirse a la hora de enviar el formulario, con el código puesto simplemente le indicamos que recargue la página. Funcionaría igual si en lugar de eso pusiéramos el nombre de nuestra página, por ejemplo: formulario.php

Con la variable $_POST recogemos los datos del formulario que escribió el usuario y los enviamos, el nombre de cada variable corresponde con el name de cada input.

La variable del if del principio, en este caso el email:

if (!isset($_POST['email'])) {

Debe ser un campo obligatorio, que estemos seguros que el usuario va a rellenar, ya que se basa en ese campo para comprobar si recibe datos (se ha enviado el formulario) o no.

La función mail es la encargada de, con todos los datos, enviar el formulario, las variables que necesita son:

– Email de destino
– Asunto del mensaje
– Mensaje
– Remitente

Con esto ya debería funcionar, tenéis que acordaros de cambiar el email de la variable destino con el email al que queráis que lleguen los mensajes.

Si lo habéis intentado, y no conseguís que el formulario funcione, podéis leer este artículo con la explicación de posibles errores y sus soluciones. Y si sigue sin funcionar podéis dejar un comentario e intentaré contestaros lo antes posible :)

Tags: