Envío de un formulario por correo mediante PHP

Formulario por correo

Se trata de enviar un correo electrónico con los datos que ha escrito una persona al rellenar un formulario web.

El código está escrito en lenguaje PHP y sirve para cualquier tipo de formulario web. Se ha intentado que fuese un código lo máximo de sencillo y útil posible.

Para poder utilizar el código PHP hay  que personalizarlo, pero es muy fácil de hacer y no es necesario tener conocimientos de programación para realizar esta tarea.

Formulario HTML de ejemplo

<form name="form1" method="post" action="correo.php">
<table>
<tr>
<th>Nombre:</th>
<td><input name="nombre" type="text" class="campo" id="nombre" size="60"></td>
</tr>
<tr>
<th>Tel&eacute;fono:</th>
<td><input name="telefono" type="text" class="campo" id="telefono" size="60"></td>
</tr>
<tr>
<th>Correo:</th>
<td><input name="correo" type="text" class="campo" id="correo" size="60"></td>
</tr>
<tr>
<th>Tipo de oferta: </th>
<td><input name="oferta" type="radio" value="individual">individual
<br><input name="oferta" type="radio" value="grupo">de grupo </td>
</tr>
<tr>
<th>Opciones:</th>
<td><input name="catalogo" type="checkbox" id="catalogo" value="si">Recibir cat&aacute;logo
<br><input name="informarme" type="checkbox" id="informarme" value="si">Informarme de otras ofertas</td>
</tr>
<tr>
<th>Procedencia:</th>
<td><select name="procedencia" class="campo" id="procedencia">
<option value="-"></option>
<option value="N">Norte</option>
<option value="C">Centro</option>
<option value="S">Sur</option>
<option value="E">Este</option>
<option value="O">Oeste</option>
</select></td>
</tr>
<tr>
<th>Observaciones:</th>
<td><textarea name="observaciones" cols="60" rows="10" class="campo" id="observaciones"></textarea></td>
</tr>
</table>
<p>
<input type="submit" value="Enviar">
<input type="reset" value="Restablecer">
</p>
</form>

Archivo correo.php

Los  términos destacados son los que hay que personalizar para cada caso en particular.

<html>
<head>
<title>Env&iacute;o del formulario</title>
</head>
<body>
<h1>Env&iacute;o del formulario</h1>

<?php
// CONFIGURACION CORREO
$destinatario = "destinatario@jettours.es";
$destinatario_cc = "";
$destinatario_bcc = "";
$asunto = "Formulario de JetTours";
$mensaje = "";
$campos_obligatorios = Array();
$campo_nombre = "nombre"; // Campo del formulario con el nombre del visitante
$campo_correo = "correo"; // Campo del formulario con el correo del visitante
// CONFIGURACION HTML
$enviado_bien = "Su formulario ha sido enviado correctamente";
$enviado_mal = "ERROR: No se pudo enviar";

// RECOGER DATOS
reset ($_POST);
$mensaje .= "<table border=\"1\">";
while (list ($clave, $valor) = each ($_POST)) {
$clave = htmlspecialchars($clave);
$valor = htmlspecialchars(trim($valor));
$mensaje .= "<tr><th>" . $clave . "</th><td>" . $valor . "</td></tr>";
}
$mensaje .= "<tr><th>Fecha petición:</th><td>" . date("d/m/Y H:i:s") . "</td></tr>";
$mensaje .= "</table>";

// VARIABLES INTERNAS
$nombre = $_POST[$campo_nombre];
$correo = $_POST[$campo_correo];
$cabeceras = "MIME-Version: 1.0\r\n"; //para el envío en formato HTML
$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n";
if ($correo != "") {
$cabeceras .= "From: " . $nombre . " <" . $correo . ">\r\n"; // Dirección del remitente
$cabeceras .= "Reply-To: " . $nombre . " <" . $correo . ">\r\n"; // Dirección de respuesta
}
if ($destinatario_cc != "") { $cabeceras .= "Cc: " . $destinatario_cc . "\r\n"; }
if ($destinatario_bcc != "") { $cabeceras .= "Bcc: " . $destinatario_bcc . "\r\n"; }

if (mail($destinatario, $asunto, $mensaje, $cabeceras)) {
echo $enviado_bien;
} else {
echo $enviado_mal;
}
?>
</body>
</html>


Ejemplo de correo que se recibe

Aquí podemos ver cómo sería el correo que recibiriamos cuando alguien rellenase nuestro formulario en la web:

Ejemplo de correo recibido

Comentarios

  1. 1 angel 2007-02-12 Hace 10 años
    Perfecto para lo que lo voy a usar
  2. 2 francis 2007-04-03 Hace 10 años
    intento copiarlo todo pero no me funciona, me ayudas?
  3. 3 francis 2007-04-03 Hace 10 años
    que hago , copio las dos partes juntas??
  4. 4 Francisco 2007-04-03 Hace 10 años
    Para probarlo hace falta dos archivos: (1) la página HTML dónde se debe incluir el formulario indicado y (2) la página "correo.php" que recogerá los datos del formulario y los enviará por correo a la dirección indicada dentro. (3) Además hay que subir las dos páginas al servidor web. En tu ordenador puedes instalarte un servidor web con Apache y PHP desde www.easyphp.org o www.wampserver.com; o bien puedes usar el servidor web de tu propio dominio. (4) Para probar si funciona desde el navegador web hay que poner la dirección de la página HTML del formulario, algo así como http://localhost/formulario.html

    Espero que esto te sirva de ayuda y sino es así deberías adquirir unos conocimientos mínimos sobre servidores web y páginas html. Lo mejor es comprarse un buen libro sobre el tema. Además en Internet hay muchos tutoriales sobre esto. Busca en la www.wikipedia.org o en el www.google.es
  5. 5 jorge 2007-04-11 Hace 10 años
    hola me gustaria que me esplicaran es punto

    (4) Para probar si funciona desde el navegador web hay que poner la dirección de la página HTML del formulario, algo así como http://localhost/formulario.html





    por q eso es lo q me esta fallanado
  6. 6 Francisco 2007-04-11 Hace 10 años
    Hay dos casos posibles en el punto (4):
    (A) Si el servidor web está en tu propio ordenador, hay que copiar los ficheros "formulario.html" y "correo.php" a la carpeta "www". Para ver si funciona hay que ir a la dirección http://localhost/formulario.html
    (B) Si tienes acceso a un servidor remoto hay que subir los ficheros "formulario.html" y "correo.php" por FTP. Luego para ver si funciona hay que poner la dirección http://www.midominio.com/formulario.html. (Es posible que tengas que acceder al panel de control de tu servidor y activar el PHP).
  7. 7 Mario 2007-11-15 Hace 10 años
    Hola funciona perfecto, lo único que al recibir el correo con la info del formulario no sale como en el ejemplo si no en formato html todo seguido y no en formato de tabla.

    ¿Cómo lo arreglo?

    Muchas gracias

    un saludo
  8. 8 manuel 2007-11-30 Hace 10 años
    como hago para ver la recepcion del mail en el outlook es decir configurar el smtp.
  9. 9 Carlos 2008-01-19 Hace 9 años
    hola, gracias por el codigo fuciona de maravila :D diria super codigo genial jejeje grias grias
  10. 10 marcelo 2008-01-20 Hace 9 años
    hola, quisiera saber si alguien me puede decir q pongo en cada parte del codigo, por ej. donde pongo la direccion de correo a la cual yo kiero q llegue...
    se los agradeceria un monton..
    marcelo
  11. 11 Maximiliano 2008-03-08 Hace 9 años
    SOLO TE PUEDO DECIR QUE ME RESULTO FANTASTICO, EXELENTE FACIL DE ENTENDER, REALMENTE TE FELICITO.
    GRACIAS
    MAXIMILIANO
  12. 12 Ricardo Castillo 2008-04-29 Hace 9 años
    GRACIAS me salvaste la vida FUNCIONA perfecto!!!
  13. 13 extruendo 2008-05-04 Hace 9 años
    Excelente formulario, solo una pregunta, si quiero que al enviar no salga la pagina en blanco de "Envío del formulario" y direccione a una web, q codigo y donde lo colocaria???
  14. 14 Fatima V 2008-06-03 Hace 9 años
    Muchisimas gracias por colocar el codigo tan sencillo y super facil de usar.
    Funciona super bien.
  15. 15 Marcel 2008-06-17 Hace 9 años
    Estimado, gracias por el código sobre formulario, ha sido de gran ayuda.
  16. 16 Gonzalo 2008-10-15 Hace 9 años
    Copie ambos archivos y lo unico que cambie fue el correo del destinatario, lo subi a una web de prueba, me manda el mensaje enviado correctamente pero no me llega nada a la casilla de correo.Si envío el formulario en blanco tambien me dice enviado correctamente.¿Que hice mal si estan copiados como en el ejemplo?
  17. 17 issa 2008-11-12 Hace 9 años
    ayudame please no me sale
  18. 18 MrDu3nD3 2009-04-16 Hace 8 años
    hize comom dijistes subi los 2 archivos active la opciones php pero cuando envio el pedido me sale

    Envi del formulario
    Warning: mail() has been disabled for security reasons in /home/webcindario/m/r/mrdu3nd3/correo.php on line 44
    ERROR: No se pudo enviar

    Que puedo hace para solucionarlo gracias :)
  19. 19 Sergio Salas /Chile/ 2009-05-29 Hace 8 años
    Estimado:

    Muchas gracias estube buscando este tutorial, de verdad lo necesitaba ademas esta funcionando al 100 porciento muchas gracias.
  20. 20 Jorge Calderón 2009-07-11 Hace 8 años
    Muchas Gracias por este gran ejemplo!!!despues de mucho buscar funcionó casi inmediatamente, GENIAL! una consulta adicional, como puedo hacer que algunos campos sean obligatorios? Muchas Gracias Nuevamente
  21. 21 mario 2009-09-14 Hace 8 años
    Genial funciona super bien. Muchas gracias.
  22. 22 Orbin 2010-01-18 Hace 7 años
    como activo el php desde el servdor, pues ya subi los archivos a la carpeta del servidor del dominio y me aparece q hay error..me puede ayudar?
  23. 23 jdrico 2010-02-10 Hace 7 años
    los campos obligatorios no me funcional
    cuando lo mando no se donde poner mi correo
    si lo pongo en destinatario
    o donde lo pongo
    ungeme
  24. 24 oscar 2010-05-01 Hace 7 años
    como hago para que el remitente reciba una copia del correo
  25. 25 jose 2011-05-12 Hace 6 años
    Hola...

    copie los códigos en cada archivo y no envía. sale un aviso que si desea abrir o guardar el archivo php.

    ayuda.

    los dos archivos están en la carpeta www de wampserver, al ejecutar el formulario no envía.

    gracias por la ayuda
  26. 26 Francisco 2011-05-13 Hace 6 años
    Hola Jose

    Debería funcionar el PHP. Si está subido a un servidor remoto tienes que acceder al panel de control del mismo y activar el PHP.

    Si lo estás probando en local lo único que se me ocurre es que estés usando el Windows y el nombre de los ficheros no sea el que piensas que es. Es decir el fichero "correo.php" quizás se llame "correo.php.txt". Abre "Mi PC", ves al menú y busca y deshabilita la opción de configuración "Ocultación de las extensiones para archivos conocidos" o algo así.

    Espero que te sirva de ayuda
Proinf.net, ©2003-2017 ci 3.1.5 (CC) Esta obra está bajo una licencia de Creative Commons Este software está sujeto a la CC-GNU GPL