Php: enviar formulario con mail ()
Mayo 8th, 2008
Bueno, inauguro mi pequeña biblioteca de código con una función que utilizo muuuuuuuy a menudo!
Es una forma ‘fácil y sencilla’ de enviar un formulario mediante php.. pego el código y voy explicando..
// dentro del if tendremos que colocar el formulario, cada input debe tener su ‘name’ para poder enviar el contenido.// al pulsar el botón enviar la acción del formulario se hará en la misma página, sin tener que llamar a una externa<?php if (!isset($_POST['email'])) { ?><form action=”<?=$_SERVER['PHP_SELF']?>” method=”post”><h1>Formulario de contacto</h1><p>Nombre:</p><p><input name=”nombre” type=”text” id=”nombre” /></p><p>Teléfono:</p><p><input name=”telefono” type=”text” id=”telefono” /></p><p>Email:</p><p><input name=”email” type=”text” id=”email” /></p><p>Mensaje:</p><p><textarea name=”mensaje” rows=”6″ cols=”50″ id=”mensaje”></textarea></p><p><input type=”reset” value=”borrar” /> <input type=”submit” value=”enviar” /></p></form><?php }else{// la variable mensaje almacena el contenido del email (los datos del formulario)// la variable subject indica el asunto que tendrá nuestro mensaje// y con la función mail enviamos el mensaje, los parámetros son: dirección de envio, asunto, mensaje, cabeceras (en mi caso pongo el remitente).$msg= “”;$msg= “Mensaje del formulario de contacto de nnatali.com”;$msg.= “\nNombre: “. $_POST['nombre'];$msg.= “\nEmail: “.$_POST['email'];$msg.= “\nTelefono: “. $_POST['telefono'];$msg.= “\nMensaje: \n”.$_POST['mensaje'];$remitente = $_POST['email'];$subject = “Mensaje enviado desde nnatali.com por: “.$_POST['nombre'];mail(’unanatali@gmail.com’, $subject, $msg, “FROM: $remitente”);?>// una vez se haya enviado el email correctamente, aparecerá un texto personalizable para que el usuario sepa que ha llegado bien a su destino : )<p><strong>Mensaje enviado.</strong><br />Su mensaje se ha enviado correctamente, gracias por ponerse en contacto con nosotros</p><? } ?>
Y más o menos está explicadito.. si añades más campos al formulario acuérdate de añadirlos también en la variable $mensaje con su correspondiente ‘name’
Para validarlo lo más fácil es:
1. Abrir el Dreamweaver.
2. Seleccionar el botón Submit.
3. Clicar en Inspector de etiquetas > Comportamientos.
(Si no lo tienes en el lateral, muestralo desde el menú Ventana > Inspector de etiquetas)
4. Seleccionar Validar formulario.
Y tachán! En un momentito lo tienes válidado para que no se te cuelen emails en blanco.
Hay formas mucho más curradas para validar y más especializadas, algún día las explicaré ^^
También te puede interesar:
Formularios: Enviar Array de un select multiple Php: Formulario ‘Recomienda a un amigo’ Javascript: Ocultar/mostrar campos en un formulario. PHP: función mail() al detalle Php: Elegir a que email enviar el formulario.
Haz llegar este artículo a más gente:

8 Mayo 2008 a las 13:13 pm
Mu chulo el blog nuevo, habrá que ir anotando todos los trucos q dejes
enhorabuena. Un besote.
9 Mayo 2008 a las 3:55 am
Y no te olvides de decir que en mail(’unanatali@gmail.com’, $subject, $msg, “FROM: $remitente”); hay que cambiar “unanatali@gmail.com” por la dirección del que use el código… xD
Uhhh contenidos útiles en el blog! no me lo puedo creer!
9 Mayo 2008 a las 4:56 am
mateotti: amorsito sabes que a ti no te hace falta apuntarlos, yo te los explico cuando quieras
xD
Azriel: aiii si eso lo he puesto cuando expliqué los parámetros de mail () sesq me lees a medias! y lo de los contenidos útiles.. no te acostumbres! jajaja
16 Mayo 2008 a las 2:57 am
Woooooooooooooooow nnatali! Me gusta tu nuevo blog, ya sabes, un poco prefabricado para mi gusto pero bueno

Has olvidado desarrollar un poco más el envío de cabeceras (el cuarto argumento de la función mail) que es muy interesante para enviar correo HTML por ejemplo, pero bueno, se perdona
Un besote que me iré suscribiendo por RSS y así me paso.
17 Mayo 2008 a las 4:35 am
KarQ: Graciass!! me alegro que te guste
tuve que pillar uno prefabricado porque si me pongo a crear un blog desde cero.. de aquí a que lo termine y quede a mi gusto ya se me han quitado las ganas de usarlo! jaja
Tienes mucha razón con las cabeceras, las desarrollaré un poco, pero lo dejo para otro post así parece que sé mas y todo xD
11 Julio 2008 a las 14:41 pm
Hola nnatali.
Soy principiante en el tema HTML y PHP, aunque con experiencia en programación.
Copié tu código acerca de como enviar un formulario mediante PHP, grabé el archivo con la extensión .HTML, cargué el navegador Internet Explorer 7 pero me salta el error de que NO SE PUEDE MOSTRAR LA PAGINA, y el mail nunca se envía.
Obviamente lo que no se es incuír código PHP dentro del HTML.
Te agradecería si puedes guiarme en esto.
Saludos.
P.D. Felicitaciones por tu blog, y saludos desde Uruguay !!!
13 Julio 2008 a las 5:13 am
Hola Eduardo!
y muchas gracias por las felicitaciones!
Cuando trabajas con php, tu archivo tiene que tener extensión .php, no .html, aunque el contenido de éste sea en su mayoría html.
Y para que te reconozca el código php incluido, tiene que estar entre lás ‘etiquetas’:
<?php (apertura) y ?> (cierre).
Debes tener en cuenta que el php es un lenguaje de servidor, por lo que para que funcione tienes que subirlo a uno, o tener instalado en tu ordenador wamp (o mamp para mac os) entre otros..
Espero que se solucione tu poblema, cualquier cosa me avisas
7 Agosto 2008 a las 19:50 pm
buenas a todos felicitaciones para la creadora del blogahora paso a contarles mi drama estoy creando una pagina en la cual hice un formulario,el formulario es grande y lo que no se es como hacer q al dar click en enviar los datos llegen al correo de mi servidor , cuento con un plan de hosting.
mi formulario esta en esta direccion por lo pronto
http://espacioforos.miarroba.com/1198004/Formulario.htm
ojala puedan verlo y crearlo los archivos nesesarios para poder hacer q funcione el formulario .
gracias espero sus prontas respuestas
espero me ayuden porfavor mi correo es alvaleon_16@hotmail.com
8 Agosto 2008 a las 5:16 am
Buenas Alexander, gracias por las felicitaciones, animan el día ^^
Sobre tu problemilla.. ¿Para crear el formulario te basaste en este artículo? ¿Lo has programado con la función mail?
De un vistazo, el primer fallo que veo es la extensión de tu archivo .htm, cuando debería ser .php (para que actúe el php)..
Responde a lo que te he preguntado a ver si conseguimos más datos para poder ayudarte
8 Agosto 2008 a las 8:50 am
gracias nnatali por responderme respondo a tu pregunta mira ese formulario lo copie de una pagina antigua q lo hizo un webmaster anterior ahora yo estoy actualizando la pagina pero el problema esque cambiaron de servidor por eso esque no puentrar al ftp anterior para ver el codigo php para enviar pero lo q yo quiero esque me ayudes si puedes hacerlo tu en php osea el formualrio como vistes esta hecho ahora lo q no se es q codigo php uso para enviar si me lo puedes hacer por mi asi me serviria como ejemplo ayudame porfavor porque soy demasiado novato con esto de codigos php
10 Agosto 2008 a las 15:27 pm
Hola Alexander, pues hacerlo por ti casi que no, yo soy de las que piensan que sólo se aprende haciendolo uno mismo
Pero si quieres intentarlo y aprender, mirate los artículos que tengo sobre cómo enviar formularios y en cuanto tengas cualquier duda me lo preguntas que te ayudaré a conseguirlo, no es tan complicado, ya verás cómo consigues hacerlo 
11 Agosto 2008 a las 14:29 pm
Waoo tienes toda la razon disculpa por mi forma de aberte pedido q me lo hagas por mi pero esque estaba demasiado apura , pero tu mensaje me laento y comense a analizar tus codigos y los estoy comprendiendo apenas me nasca una duda te aviso
11 Agosto 2008 a las 15:49 pm
ya ahora me surgio mi duda hago copio los primeros codigos y los pego en drean weaver si se genera un formulario.
paso 2 creo un nuevo archvo php y copio el segundo codigo y lo suvo a mi servidor
ahora la pregunta el codigo q es el q te dice q el mensaje se envio con exito donde lo pego lo pego en el mismo codigo del formulario o lo pego en el segundo codigo del q se envia el mensaje
11 Agosto 2008 a las 22:07 pm
Buenos dias Alexander, me alegro que cambiases de idea
El codigo que explico aqui arriba va en el mismo archivo .php todo, tu formulario debe ir entre:
<?php if (!isset($_POST['email'])) { ?>
y:
<?php }else{
A continuacion debes agregar las variables en funcion a los campos de tu formulario..
12 Agosto 2008 a las 6:47 am
gracias por responderme
ya mira pege todo este codigo en un archivo php.
<form action=”” method=”post”>
Formulario de contacto
Nombre:
Teléfono:
Email:
Mensaje:
ahora mi pregunta donde pego este codigo .
Mensaje enviado.
Su mensaje se ha enviado correctamente, gracias por ponerse en contacto con nosotros
gracias disculpa por ser tan preguntos pero no se donde poner el ultimo codigo en el q sale mensaje enviado
13 Agosto 2008 a las 14:08 pm
Hola de nuevo Alexander,
Creo que no me entiendes, el código que sale en este artículo, en el que estamos comentando, aquí arriba, en un bloque verde, tienes que copiarlo toooooodo seguido en el mismo archivo .php, quita mis comentarios (el texto después de la doble barra //) para que no te dé fallo y en ese código donde aparece el formulario, eso que está entre las etiquetas <form> y </form>, lo reemplazas por el tuyo que tienes ya creado.
Luego asignas las variables según los campos de tus formularios (cómo explico arriba) y pones la dirección de correo a la que quieres que lleguen los correos y listo.
Dime que parte no comprendes, en que te lías, o si algo de lo que hay no sabes lo que és.. así me será más facil ayudarte
Un saludo y ánimo!!
14 Agosto 2008 a las 18:22 pm
ahora s i me quedo claro logre hacer el formulario muchas gracias por todo , me tuvistes mucha paiencia
15 Agosto 2008 a las 3:06 am
me alegro un montón, enhorabuena x tu primer formulario!
15 Agosto 2008 a las 20:33 pm
Muchas gracias nuevamente mira ya q habia hecho un formulario basico gracias a ti logico ,decidi aumentar mi nivel de conocimiento y decidi hacer un formualario con mas datos ya que me habian pedido uno con mucha mas informacion y lo logre por eso he regresado a darte nuevamnete las gracias por tu ayuda ya que aprendi mas y aumente mi nivel en formularios.
me gustaria q veas la pagina web que he hecho para una empresa
http://www.propiedadesloyher.cl
ahi hay una opcion q dice formulario ,me gustaria q lo veas y q me des tu opinion con respecto al diseño y haber si me das algun consejo para seguir creciendo en sentido de conocimiento gracias
espero tu opinion.
bye nnatali se despide un amigo mas
17 Agosto 2008 a las 14:41 pm
Holitas Alexander,
Sobre el diseño es a gusto del consumidor xD yo lo pondría un poco más acorde al diseñito de la página.. pero eso es lo que tu veas.
Ya vi tu formulario, si conseguiste que se te envíen todos los campos es un logro, me alegro
A ver si cuando vuelva de vacaciones escribo un artículo con ejemplos de diseños para formularios y le hechas un vistazo ^^
Lo que sí te aconsejo es que lo valides, ya que ahora mismo se envía sin rellenar campos y te llegarán muchos emails vacíos, pon algunos datos básicos obligatorios.
Un saludo!!
28 Agosto 2008 a las 4:33 am
He creado un formulario en html, pero no consigo que me funcione el boton enviar, he tenido todo tipo de problemas con el codigo php, ahora mismo el problema que tengo es que al pulsar el boton enviar me da un mensaje de error y me dice que ha habido un error inesperado y ya no se que es lo que me falla este es el codigo completo del php si alguine ve el error agradeceria que me lo dijera:
<?php
$nombre = $_POST['nombre'];
$e-mail = $_POST['e-mail'];
$empresa = $_POST['empresa'];
$telefono = $_POST['telefono'];
$vehiculo = $_POST['vehiculo'];
$header = ‘From: ‘ . $e-mail . ” \r\n”;
$header .= “X-Mailer: PHP/” . phpversion() . ” \r\n”;
$header .= “Mime-Version: 1.0 \r\n”;
$header .= “Content-Type: text/plain”;
$mensaje = “Este mensaje fue enviado por ” . $nombre . “, de la empresa ” . $empresa . ” \r\n”;
$mensaje .= “Su e-mail es: ” . $e-mail . ” \r\n”;
$mensaje .= “Mensaje: ” . $_POST['mensaje'] . ” \r\n”;
$mensaje .= “Enviado el ” . date(’d/m/Y’, time());
$para = ‘ejemplo@dominio.com’;
$asunto = ‘Contacto desde Web Ts3 4×4′;
mail($para, $asunto, utf8_decode($mensaje), $header);
echo “Mensaje enviado correctamente”
Documento sin t
29 Agosto 2008 a las 6:50 am
oye, muy buena info, me sacaste la ´pata del barro…. besos
1 Setiembre 2008 a las 5:19 am
Parse error: syntax error, unexpected ‘=’ in /home/u1/ap3349862706/html/enviar.php on line 5
este es el mensaje de error que me da por favor si alguien sabe que puedo hacer, no encuentro el fallo
1 Setiembre 2008 a las 5:37 am
Gracias por el comentario jjpp, me alegro que te sirviera
Buenas TS3, el error que te indica es un error de sintaxis, es decir que has puesto en mal sitio una coma, un punto y coma, etc, en este caso el problema es un igual (=) revisa que no se te haya colado donde no es
2 Setiembre 2008 a las 10:03 am
muchas gracias he corregido el error y ahora se me envia pero no me llega nada al correo
ni como correo no deseado probe con una cuenta de hotmail y no me llego como vi que solia dar problemas utilize una de la empresa y tampoco me llega
la pagina es http://www.ts34×4.com
4 Setiembre 2008 a las 1:16 am
hola nnatali, gracias por el material, esta sumamente interesante. De verdad estaba en apuros pero puede lograrlo con tus indicaciones. Quisiera saber si puedes ayudarme en otra cosa:
como hago para validar el formulario, de manera de que si la persona que lo esta rellenando no pueda enviarlo sino ha llenado todos los campos. Yo lo valide de la forma común, por esto de comportamientos, pero cuando voy a rellenrlo yo misma y lo envio, me sale que si quiero lo lleno y sino no, es decir, puede quedar algun campo en blanco y es justamente lo que no quiero. Necesito que todos sean obligatorios. Muchisimas gracias de antemano nnatali. Te lo agradezco mucho.
Saludos desde venezuela
11 Setiembre 2008 a las 6:06 am
Buenas adriana, muchas gracias por tu comentario y disculpa la tardanza en contestarte.
Cuando dices que lo validaste por comportamientos,.. ¿Quieres decir que lo hiciste con el Dreamweaver, verdad? ¿Te aseguraste de que colocara bien el código javascript en el head de tu página? ¿Que evento te creó en el botón de enviar?
De todas formas esta semana publicaré un tutorial para validar los formularios con y sin Dreamweaver, a ver si te consigo ayudar.
Saludos!
12 Setiembre 2008 a las 7:17 am
tengo un problema al enviar un formulario, me da error y no se porque adjunto el codigo.
<?php
// Aqui pasamos los valores del formulario a variables
$nombre = $_POST['nombre'];
$contacto = $_POST['contacto'];
$contacto = $_POST['municipio'];
$telf1 = $_POST['telf1'];
$email = $_POST['email'];
$areas = $_POST['areas'];
$observaciones = $_POST['observaciones'];
// Aqui pasamos los valores del formulario a variables
//$nombre = $_POST['nombre'];
//$email = $_POST['email'];
//$asunto = $_POST['asunto'];
//$comentarios = $_POST['comentarios'];
$to = “ana@annex.es;ana@annex.es”;
$header = “From: “.$nombre .”";
$asunto = “Formulario desde Web”;
//$mensaje = “Hola, “.$nombre .” (”.$email.”)\n te escribio el siguiente mensaje: \n\n”;
$mensaje = “Mensaje enviado desde el formulario de la pagina web \n\n\n\n”;
$mensaje .= “Nombre Empresa = “.$nombre .”\n”;
$mensaje .= “Persona de Contacto = “.$contacto .”\n”;
$mensaje .= “Municipo Empresa = “.$municipio .”\n”;
$mensaje .= “Teléfono de contacto = “.$telf1 .”\n”;
$mensaje .= “Email = “.$email .”\n”;
$mensaje .= “Areas de interes = “.$areas .”\n”;
$mensaje .= “Observaciones = “.$observaciones .”\n”;
//echo “mensaje : $mensaje ” ;
mail($to, $asunto, $mensaje, $header ) or die(”No se ha enviado el correo de $nombre ($email) error: mysql_error()”);
echo ‘
Correo enviado satisfactoriamente. Nos pondremos en contacto con usted. Gracias.
‘;
?>
Me da error pero no se que es lo que pasa , me estoy volviendo loca.
Gracias,
15 Setiembre 2008 a las 5:47 am
Holitas Ana, ¿Que error te indica? ¿Que tienes en la etiqueta form?
25 Setiembre 2008 a las 18:40 pm
Hola, soy nueva en esto de la programación y he encontrado tu página, de verdad gracias por compartir tus conocimientos. Mi problema es que mi servidor que es de pago, me indica que para envío de formularios, deben estar dentro de una carpeta GCI-BIN y no en el directorio raíz. La cuestión es que si coloco la página htlm en donde está el formulario en esa carpeta, la página index no me redirecciona al formulario. No tengo idea de cómo hacer el enlace. Me podrías por favor orientar al respecto?
Gracias anticipadas por tu apoyo.
26 Setiembre 2008 a las 6:54 am
Hola susana, no tengo mucha idea de lo que me preguntas, ya que nunca he tenido problemas con mis servidores, pero vamos a ver que podemos hacer..
De primeras no entiendo por que te indican que debes poner tu formulario en la carpeta cgi-bin, ¿Tu servidor no admite php?, tenía entendido que esa carpeta era sólo para los archivos cgi.. :/
Si aún así eso es lo correcto, puede que tengas un problema con los permisos del archivos.. en tu ftp asignale permisos 755 o 777 (Haz clic con el botón derecho sobre el archivo y selecciona Set Attributes).
Por cierto, ¿tu formulario lo tienes bien programado? Me ha parecido entenderte que es un archivo.html, ten en cuenta que para que se ejecute el php de un archivo éste tiene que tener la extensión .php.
Espero que tengas suerte!
6 Octubre 2008 a las 14:57 pm
como hago para incluir um campo para enviar comentarios a my web, como este tuyo?
gracias
7 Octubre 2008 a las 9:46 am
leooooooooooooooooo
9 Octubre 2008 a las 13:54 pm
Hola marcelo!
Mi web no es una web, es un blog y uso un CMS llamado Wordpress sólo que le he aplicado un diseño propio, hecha un vistazo a su web oficial: http://es.wordpress.org/
Si lo que quieres es crear un formulario que te llegue al email, en este mismo post lo explico, lee un poco más arriba
Y para programarte un sistema de comentarios en tu web.. no es tan sencillo, en un futuro explicaré como hacerlo, pero por ahora sólo te puedo recomendar que busques en el sabelotodo Google..
10 Octubre 2008 a las 9:47 am
Nnatali, cuando trato de abrir el codigo que pones, no me deja, solamente abre el texo plano como si fuera un archivo de texto, que puede ser?
10 Octubre 2008 a las 13:32 pm
Hola fabricio! Pues a ver.. ¿Copiaste el código que indico en un archivo con extensión .php? ¿Cómo lo quieres abrir?