Php: enviar formulario con mail ()

Mayo 8th, 2008

Biblioteca de codigo

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’ :P
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é ^^

Haz llegar este artículo a más gente:

36 comentarios en “Php: enviar formulario con mail ()”

  1. mateotti comentó:

    Mu chulo el blog nuevo, habrá que ir anotando todos los trucos q dejes :) enhorabuena. Un besote.

  2. AzRi3L comentó:

    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! ;)

  3. nnatali comentó:

    mateotti: amorsito sabes que a ti no te hace falta apuntarlos, yo te los explico cuando quieras :P 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

  4. KarQ comentó:

    Woooooooooooooooow nnatali! Me gusta tu nuevo blog, ya sabes, un poco prefabricado para mi gusto pero bueno :P
    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 :P
    Un besote que me iré suscribiendo por RSS y así me paso.

  5. nnatali comentó:

    KarQ: Graciass!! me alegro que te guste :D 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

  6. Eduardo comentó:

    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 !!!

  7. nnatali comentó:

    Hola Eduardo!
    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 :) y muchas gracias por las felicitaciones!

  8. Alexander-Gino comentó:

    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

  9. nnatali comentó:

    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 :)

  10. Alexander-Gino comentó:

    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

  11. nnatali comentó:

    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 :)

  12. Alexander-Gino comentó:

    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

  13. Alexander-Gino comentó:

    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

  14. nnatali comentó:

    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.. :)

  15. Alexander-Gino comentó:

    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

  16. nnatali comentó:

    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!!

  17. Alexander-Gino comentó:

    ahora s i me quedo claro logre hacer el formulario muchas gracias por todo , me tuvistes mucha paiencia

  18. nnatali comentó:

    me alegro un montón, enhorabuena x tu primer formulario! :)

  19. Alexander-Gino comentó:

    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

  20. nnatali comentó:

    Holitas Alexander,
    Ya vi tu formulario, si conseguiste que se te envíen todos los campos es un logro, me alegro :) 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.
    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!!

  21. TS3 comentó:

    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

  22. jjpp comentó:

    oye, muy buena info, me sacaste la ´pata del barro…. besos

  23. TS3 comentó:

    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

  24. nnatali comentó:

    Gracias por el comentario jjpp, me alegro que te sirviera :D

    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 ;)

  25. TS3 comentó:

    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

  26. adriana comentó:

    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

  27. nnatali comentó:

    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!

  28. Ana comentó:

    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,

  29. nnatali comentó:

    Holitas Ana, ¿Que error te indica? ¿Que tienes en la etiqueta form?

  30. susana comentó:

    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.

  31. nnatali comentó:

    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! :)

  32. marcelo comentó:

    como hago para incluir um campo para enviar comentarios a my web, como este tuyo?
    gracias

  33. kleo comentó:

    leooooooooooooooooo

  34. nnatali comentó:

    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..

  35. fabricio comentó:

    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?

  36. nnatali comentó:

    Hola fabricio! Pues a ver.. ¿Copiaste el código que indico en un archivo con extensión .php? ¿Cómo lo quieres abrir?

¡Comenta tu también!