Los formularios son una herramienta muy común en las webs y su uso más amplio puede que sea como método de contacto. ¿Y que sería contactar en la red sin el correo electrónico? Veamos como enviar un formulario a un email usando php y la función mail().

Primero el formulario

En cualquier editor de código o el siempre recurrido bloc de notas ponemos nuestro formulario y lo guardamos como formulario.html, o con el nombre que quieras. Ten en cuenta en modificar los valores de las opciones del select "Para" introduciendo los emails donde quieras que sean enviados los formularios.

<!DOCTYPE html>
<html lang="es-es">
 <head>
  <title>Ejemplo de envío de formulario por email con php</title>
  <meta name="description" content="Formulario de contacto enviado por correo electronico usando php"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <div id="formulario"> <form action="enviar.php" method="post">
Nombre: <input name="nombre" size="40" type="text" /> Email: <input name="email" size="40" type="text" /> Asunto: <input name="asunto" size="40" type="text" /> Para: <select name="para"> <option value="publicidad@misitio.com">Dpto. de publicidad</option> <option value="administracion@misitio.com">Dpto. de administracion</option> </select> Mensaje: <textarea cols="40" rows="6" name="mensaje"></textarea> <input name="enviar" type="submit" value="Enviar" />
</form> </div> </body> </html>

Segundo el script php

Usemos de nuevo nuestro editor favorito, ponemos el siguiente código y guardamos como enviar.php.

<?php

  //variable de validacion
  $valida = true;
  if (empty($_POST['nombre'])) {
    echo "<b>No se especifico nombre</b><br/>";
    $valida = false;
  }

  if (empty($_POST['email'])) {
   echo "<b>No se especifico E - mail</b><br/>";
$valida = false; } if (empty($_POST['asunto'])) { echo "<b>No se especifico asunto</b><br/>"; $valida = false; } if (empty($_POST['mensaje'])) { echo "<b>Por favor, no envie un mensaje en blanco</b><br/>"; $valida = false; } // Validamos la direccion de correo electronico if (!strpos($_POST['email'],"@") || !strpos($_POST['email'],".")) { echo "<b>No es un correo valido</b><br/>"; $valida = false; } // Si las comprobaciones son correctas if ($valida == true) { // Creamos el header para el mensaje // para: $to = $_POST['para'];
// Asunto $subject = $_POST['asunto'];
// Cabeceras del mail (Content-Type y demas info) $headers = "MIME-Version: 1.0\n"; $headers .= "Content-type: text/html; charset=utf-8\n";
// El From: en la forma Nombre <email@sitio.com>, esto garantiza que // el receptor vea solo el nombre de quien envia $headers .= "From: ".$_POST['nombre']." <".$_POST['email'].">\n";
// Opcional: Resopnder a: $headers .= "Reply-To: " . $_POST['email']."\n";
//Opcional X-Mailer $headers .= "X-Mailer: PHP/" . phpversion();
// Cuerpo del email $message = $_POST['mensaje']; if(mail($to, $subject, $message,$headers)) { echo "<p>Mensaje enviado, Gracias por sus sugerencias.<br /><a href=\"javascript:history.go(-1)\">Volver</a></p>"; } } ?>

Ahora que tienes los dos archivos listos, ponlos en el mismo directorio, abre formulario.html, y pruébalo. Este artículo es tan sólo una implementación básica para mostrar el concepto de envío de un formulario por email con php y no ha de ser tomado en ningún caso como una implementación lista para una web en producción.

Como siempre, cualquier sugerencia, duda, discrepancia o cualquier cosa que queráis compartir sobre el envío de formularios por email con php, nada más que escribirlo en los comentarios.

Para no responder más veces a las mismas preguntas, y que no hagáis las mismas preguntas una y otra vez, aquí dejo la respuesta que doy a las preguntas que más veces me habéis hecho en los comentarios:

  • Al hacer clic en el botón "Enviar" me aparece el código php en el navegador, ¿por qué?: lo más seguro es que no tengas el motor PHP instalado. Si haces la prueba en tu servicio de hosting, probablemente el plan de hosting que tienes contratado no incluye el soporte para programación en PHP, pregunta a la atención al cliente de tu proveedor de hosting.
  • Estoy probando este código en un servidor con Windows y no me funciona: La configuración por defecto de PHP hace uso de un servidor SMTP local para enviar los correos electrónicos, pero, a diferencia de Linux, Windows no cuenta con un servidor SMTP. Por tanto, si estás en Windows has de instalar un servidor de correo electrónico en tu servidor, o utilizar un servidor de correo electrónico externo, y configurar PHP de forma adecuada. Desde mi punto de vista lo más fácil es utilizar la biblioteca PHPMailer.
Juan Padial

Escrito por

Juan Padial

Farméutico por casualidades de la vida y por condición apasionado de la informática,...

Comparte este artículo