En un post anterior expliqué como enviar formularios sin recargar, ahora voy a explicar como hacer un formulario de envio de correos con jquery, incluyendo un loader y que nos muestre un mensaje de error si no se pudo enviar el mensaje.

El formulario mailer

El formulario practicamente no tiene nada de especial, sólo debemos asegurarnos que tenga como id «myform», además necesitamos dos divs en uno mostraremos el resultado y el otro nos servirá como loader.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form method="post" action="envio.php" id="myform" name="myform" >
      <fieldset id="form">
        <legend>Send Email</legend>
        <ol>
            <li><label>Name:</label><input type="text" size="30" name="fname" /></li>
            <li><label>E-mail:</label><input type="text" size="30" name="femail" /></li>
            <li><label>Phone:</label><input type="text" size="30" name="fphone" /></li>
            <li><label>Comments:</label><textarea name="fcomment" rows="5" cols="25"></textarea></li>
        </ol>
        <p align="center">
        <input type="submit"   name="mysubmit" value="Enviar" />
        </p>
      </fieldset>
</div>
</form>
<div id="loading"></div>
<div id="result"></div>

Ajax para el envio del formulario

En este caso vamos a usar jquery para que envie los datos del formulario a envio.php, el cual a su vez enviará un correo electrónico

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<script language="javascript" src="jquery-1.3.min.js"></script>
<script language="javascript">
$(document).ready(function() {
   // Mostramos el loader
    $().ajaxStart(function() {
        $('#loading').show();
        $('#result').hide();
    }).ajaxStop(function() {
        $('#loading').hide();
        $('#result').fadeIn('slow');
    });
   // Enviamos el formulario
    $('#myform').submit(function() {
   // Definimos el metodo ajax, los datos
        $.ajax({
            type: 'POST',
            url: $(this).attr('action'),
            data: $(this).serialize(),
            success: function(data) {
                // Imprimimos la respuesta en el div result
                $('#result').html(data);

            }
        })
       
        return false;
    });
})  
</script>

envio.php

Ahora vamos a hacer el envio de un correo electrónico con los datos del formulario

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
// definimos el mensaje
$mensaje="";
$mensaje.="Contact from:". "\n\n";
$mensaje.="Name: ".$_POST['fname']."\n";
$mensaje.="E-mail: ".$_POST['femail']."\n";
$mensaje.="Phone: ".$_POST['fphone']."\n";
$mensaje.="Comments: ".$_POST['fcomment']."\n";
// definimos a quien se lo enviamos
$email_destiny="mio@mail.com";
$subject="Message from us";
// verificamos si se envió
if (mail($email_destiny,$subject,$mensaje,"From: Contact<".$_POST['femail'].">")) {
    echo '<p align="center"><b>Thanks for your comments</b></p>';
} else {
    echo '<p align="center">Error '.$_POST['fname'].'</p>';
}
?>