En este tutorial veremos como enviar un correo desde un formulario de contacto con PHP usando la función mail()
¿Cómo crearemos el formulario en html?
Nuestro formulario de contacto debe tener 4 elementos básicos, que es el nombre, el correo, el área de texto donde irá el mensaje y el botón de enviar. Si quieren agregar más campos pueden visitar nuestro artículo Formulario en HTML o también puedes personalizar tu formulario.
1
2
3
4
5
6
|
<form method=“post” action=“<?php $_SERVER[‘PHP_SELF’];?>“>
<label>Nombre completo <input type=“text” name=“nombre” /></label>
<label>E-mail <input type=“text” name=“email” /></label>
<label>Deja tu mensaje <textarea name=“mensaje”></textarea></label>
<button type=“submit” name=“enviar”>Enviar consulta</button>
</form>
|
Tengan en cuenta que el atributo name será el nombre del elemento en el array $_POST[]
una vez que enviemos el formulario. O sea que el elemento en la variable $_POST[]
para el input “E-mail” quedaria de esta manera $_POST['email']
¿Cómo validar los datos enviados por el formulario?
El correo antes de ser enviado tiene que ser verificado con PHP por un tema de seguridad y además de que los formularios vengan completos y con la información que necesitamos.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<?php
if(isset( $_POST[‘enviar’] ))
{
$nombre = $_POST[‘nombre’];
$email = $_POST[’email’];
# Con la función htmlentities() o htmlspecialchars convertimos todos los
$mensaje = htmlentities($_POST[‘mensaje’]);
# Solamente pasan letras y espacios
if( !preg_match(‘/^[A-Za-záéíóúñ]{2,}([\s][A-Za-záéíóúñ]{2,})+$/’, $nombre) )
{
$error_nombre = ‘<p class=”error”>Hey! Debes colocar tu nombre y apellido.</p>’;
$error = true;
}
# Chequeamos de que se trate de un correo realmente
if( !preg_match(‘/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/’, $email) )
{
$error_email = ‘<p class=”error”>Ups! Al parecer no escribiste un correo válido.</p>’;
$error = true;
}
# Verificamos que el mensaje tenga más de 50 caracteres
if(strlen( $mensaje ) < 50)
{
$error_mensaje = ‘<p class=”error”>Opale! Debes escribir un mensaje de más de 150 caracteres.</p>’;
$error = true;
}
if(empty( $error ))
{
# E-mail donde se recibirán los correos
$email = ‘prueba@prueba.com’;
# El asunto que tendrá el correo
$asunto = ‘Correo de contacto’;
# Las cabeceras son opcionales pero se las recomiendo, ya que aquí podremos agregar la codificación, tipo de correo (plano o HTML) y quién nos lo envió
$cabecera = ‘From: ‘ . $nombre . ‘ <‘ . $email . ‘>’ . “\r\n” .
‘Content-type: text/plain; charset=UTF-8’ . “\r\n” .
‘X-Mailer: PHP/’ . phpversion();
# Con la función mail() de PHP enviamos nuestro correo
mail($email, $asunto, $mensaje, $cabecera);
}
}
?>
|
Con la función preg_match()
de PHP y las expresiones regulares que vimos en un artículo anterior validaremos el nombre de la persona para que solamente pase caracteres alfabéticos. Además es necesario agregar aquellos caracteres especiales como tildes y ñ para nombres como Nicolás o Iñaki que de otro modo no podrían pasar la validación.
También con preg_match()
validaremos el correo que solamente aceptará los caracteres alfanuméricos, guiones, guiones bajos y puntos. Además verificamos si el correo se encuentra en el formato correcto: ejemplo@correo.com
A la variable $_POST['mensaje']
que es donde viene el contenido del mensaje, por un tema de seguridad primero tendremos que limpiarla con htmlentities()
para que los caracteres HTML sean convertidos a su entidad correspondiente. Por ejemplo el símbolo mayor-menor (<
) nos quedaría <
VIENDO LA FUNCIÓN MAIL()
Finalmente llegamos a la función mail()
que será la encargada de enviar el correo. Por esta función debemos pasar de forma obligatoria 3 datos que son: mail( Destinatario, Asunto del correo, Mensaje )
, pero también podemos agregar de forma opcional, un cuarto dato que será la cabecera: mail( Destinatario, Asunto del correo, Mensaje, Cabecera )
.
La cabecera es la encargada de enviarnos parámetros adicionales como si el correo será plano o en html, si queremos enviarle una copia o copia oculta a otro destinatario, la codificación de caracteres, etc.