PHP Mailer en Formulario de Contacto

Tiempo estimado de lectura: 2 minutos

Una de las funcionalidades incorporadas en PHP es la de enviar correos automáticamente a partir de un determinado evento en nuestro sitio web. El caso más común donde utilizar esto es cuando incorporamos un formulario de contacto en nuestro sitio, para que los visitantes del mismo tengan un canal de comunicación directo con nosotros.

En esta guía vamos a mostrar cómo podemos incorporar un formulario de contacto en nuestro sitio web, y cómo reenviar la información obtenida mediante el mismo hacia una casilla de nuestra elección. Y, además, incluimos la utilización del sistema de CAPTCHA de Google para evitar que se envíe spam a través de nuestro formulario.

 

  1.  El primer paso es crear el formulario de contacto. El siguiente código muestra como crear un formulario, pero dado que es a modo de ejemplo, es algo  básico y sencillo. Si lo deseamos podemos agregarle maquetación extra, o sanitarizar el input mediante JavaScript o Boostrap, o cualquier otra tecnología que consideremos necesaria.
<!DOCTYPE html>
<html>
<head>
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body bgColor="grey">
  <form action="mandoMail.php" method=post name="formx">
<table width="450px">
<tr>
 <td valign="top">
  <label for="Nombre">Nombre</label>
 </td>
 <td valign="top">
  <input  type="text" name="Nombre" maxlength="50" size="30">
 </td>
</tr>
 
<tr>
 <td valign="top">
  <label for="Apellido">Apellido</label>
 </td>
 <td valign="top">
  <input  type="text" name="Apellido" maxlength="50" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="email">Email</label>
 </td>
 <td valign="top">
  <input  type="text" name="email" maxlength="80" size="30">
 </td>
 
</tr>
<tr>
 <td valign="top">
  <label for="comentario">Comentario</label>
 </td>
 <td valign="top">
  <textarea  name="comentario" maxlength="1000" cols="25" rows="6"></textarea>
 </td>
 
</tr>
<tr>
 <td colspan="2" style="text-align:center">
  <input type="submit" value="Enviar">
 </td>
</tr>
</table>
<div class="g-recaptcha" data-sitekey="6LeXlJ8UAAAAAIBMyoexfSQ5ycN6VQLmd6xu25Au"></div>
</form>
</body>
</html>

Nos va a quedar algo similar a esto:

2.  En el diseño de este formulario agregamos dos tag para incluir el sistema de CAPTCHA de Google:

<script src=’https://www.google.com/recaptcha/api.js’></script>

<div class=”g-recaptcha” data-sitekey=”6LeXlJ8UAAAAAIBMyoexfSQ5ycN6VQLmd6xu25Au”></div>

Para que el CAPTCHA funcione en nuestro sitio debemos generar una clave propia para el mismo desde nuestro panel de Control de Google. Podemos encontrar una guía para hacer esto en el siguiente link:  https://developers.google.com/recaptcha/intro .

Es un servicio totalmente gratuito y fácil de usar. Básicamente Google nos va a dar dos claves (o keys): una para colocar en el HTML y otra para usar en el backend (en nuestro caso, en nuestro script de PHP).

3.  Una vez que tenemos creado el formulario e incluimos la clave para usar el sistema de CAPTCHA de Google, solo nos queda crear el script de PHP  que va a realizar el envío del mail con los datos del formulario.

<?php

if ($_POST['g-recaptcha-response'] == '') {
echo "Captcha invalido";
} else {
$obj = new stdClass();
$obj->secret = "6LeXlJ8UAAAAAB-jEG2M49toqrp0N_GgpApSdVTn";
$obj->response = $_POST['g-recaptcha-response'];
$obj->remoteip = $_SERVER['REMOTE_ADDR'];
$url = 'https://www.google.com/recaptcha/api/siteverify';

$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($obj)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);

$validar = json_decode($result);

/*  FIN DE CAPTCHA   */

if ($validar->success) {
$email = trim($_POST['email']);
$nombre = trim($_POST['nombre']);
$apellido = trim($_POST['apellido']);
$telefono = trim($_POST['telefono']);
$comentario = trim($_POST['comentario']);

$consulta = "E-mail: " . $email . " Nombre: " . $nombre . " Apellido: " . $apellido . "Comentario: " . $comentario;

mail("[email protected]", "Contacto desde Formulario", $consulta);
} else {
echo "Captcha invalido";
}
}
?>

4.  Podemos analizar este script en dos partes:

a) Antes de la línea /* FIN DE CAPTCHA */  se encuentra la lógica para cerciorarnos de que el usuario que cargó el formulario activó correctamente el CAPTCHA. Lo único que debemos cambiar es la línea $obj->secret = “” . Entre las comillas debemos colocar la SERVER KEY que nos proporcionó Google. El resto lo dejamos tal cual.

b) Luego de la línea /* FIN DE CAPTCHA */ vamos a validar si todo el proceso de comprobación de CAPTCHA se ejecutó correctamente. En caso afirmativo vamos a recuperar los datos que el usuario ingresó y generar el envío de correo usando la función mail(). A esta función hay que pasarle los siguientes datos para que funcione (en este orden):

a) Dirección de correo que va a recibir el mensaje ;

b) El Asunto del correo ;

c) El mensaje a enviar.

5. Listo!

PHP
Ha sido útil este artículo?
No 28
Visitas: 6058
@2018 IntermediaSP es marca de Interdotnet Argentina S.A.