PHP

¿Cómo validar el formato correcto de la dirección de correo electrónico en PHP?

validar email

Recibir mensajes de correo electrónico a través de su sitio web o aplicación web es una característica importante y a menudo la única manera de ponerse en contacto con sus clientes. Si miras atrás, ¿cuántas veces has recibido un mensaje de correo electrónico de un cliente potencial con una dirección de correo electrónico inválida o incorrecta? Seguro que puedes usar patrones avanzados de expresión regular para comprobar el formato de la dirección de correo electrónico, pero estos patrones no comprueban si la dirección de correo electrónico existe realmente. Este tutorial trata sobre una doble validación de direcciones de correo electrónico, primero verificamos el formato de la dirección de correo electrónico y segundo validamos las direcciones de correo electrónico con un sistema de API en PHP.

¿En qué tipo de situaciones deberías comprobar una dirección de correo electrónico?

En realidad necesitas una dirección de correo electrónico válida todo el tiempo, pero a veces es necesario un control adicional para alcanzar tus objetivos. Usamos una segunda capa de validación de direcciones de correo electrónico para:

Formularios de contacto:
La mayoría de los formularios de contacto incluyen sólo los campos necesarios como el nombre, la dirección de correo electrónico y el mensaje. No hay posibilidad de contactar a su nuevo cliente potencial si la dirección de correo electrónico enviada es incorrecta.

Pedidos de la tienda web:
En este caso usted obtiene (a menudo) mucha más información, pero su cliente nunca obtendrá una confirmación del pedido si la dirección de correo electrónico que introdujo durante el proceso de compra no es válida.

Listas de correo:
Si su lista de correo no se ha utilizado durante algún tiempo, muchas de las direcciones de correo electrónico incluidas pueden haber caducado mientras tanto. La próxima campaña de correo electrónico puede tener un alto porcentaje de rebotes y esto es a menudo un problema para su proveedor de marketing por correo electrónico. Compruebe todas las direcciones de correo electrónico antes de enviar una nueva campaña.

Validar más con la API de Mailboxlayer

Mailboxlayer es un servicio de apilayer, una compañía con sede en Viena, Austria. No sólo ofrecen la API de validación de correo electrónico, sino también sistemas de API para la conversión de divisas, la creación de PDF y varios más. Todos sus servicios API se basan en un modelo premium, por lo que puedes utilizarlos de forma gratuita si no haces tantas llamadas a la API.

Una cuenta gratuita de Mailboxlayer API incluye 250 créditos al mes. Esto puede ser suficiente para sitios más pequeños, pero sólo si envía sólo aquellas direcciones con un formato de dirección de correo electrónico «bueno». Utilice, por ejemplo, una prueba de expresión regular antes de enviar la dirección de correo electrónico al punto final de la API.

¿Qué tipo de métodos de validación utiliza Mailboxlayer?

Además de comprobar el formato de la dirección de correo electrónico, Mailboxlayer está utilizando diferentes métodos para comprobar la dirección de correo electrónico enviada:

Validación DNS:
Se requiere un registro MX válido para enviar un mensaje de correo. Si el registro MX del nombre de dominio utilizado no existe, no se podrá enviar ningún mensaje de correo electrónico.

Comprobación SMTP:
La API del Mailboxlayer creará una conexión SMTP para verificar que un simple comando HELO es posible.

Capturar todas las direcciones de correo electrónico:
Una captura de todas las direcciones de correo electrónico acepta cualquier dirección de correo electrónico para el nombre de dominio utilizado. Si la comprobación de la dirección de correo electrónico se utiliza para una lista de correo, la función «Atrapar todas las direcciones de correo electrónico» puede tener una baja tasa de apertura de correo electrónico.

Direcciones de correo electrónico generales y desechables:
Mailboxlayer también puede reconocer direcciones de correo electrónico generales como soporte, información o contact@domain.com. Esas direcciones de correo electrónico y también las direcciones desechables como user123@domain.com pueden funcionar con una baja tasa de apertura de correo electrónico al enviar una campaña de correo electrónico a su lista de correo.

Sintaxis válida:
Al igual que en su propia aplicación, la API comprobará primero la sintaxis de su dirección de correo electrónico (para asegurar el tiempo y los recursos de validación).

¿Cómo (pre) comprobar el formato de la dirección de correo electrónico?

Hay diferentes maneras de comprobar el formato de la dirección de correo electrónico. Sugerimos revisar la dirección de correo electrónico primero en el lado del cliente en JavaScript y segundo en PHP también. Use la función para validar el formato de la dirección de correo electrónico. De esta manera sólo las direcciones de correo electrónico con un formato «bueno» necesitan ser procesadas por su función PHP.

function isValidEmailAddress(emailAddress) {
	var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
	return pattern.test(emailAddress);
}
jQuery(document).ready(function($) {
    $( "#testform" ).submit(function( event ) {
        var email = $('#email_address').val();
        if (!isValidEmailAddress(email)) {
            alert( 'Email address ' + email + ' is not valid...' );
        }
        event.preventDefault();
    });
});

Si no te gusta usar JavaScript para la validación del lado del cliente, también es una buena idea usar la validación de campos del formulario HTML5. Revisa el atributo «pattern» donde se usa una expresión regular para validar el valor del campo del formulario. Y, por supuesto, puedes usar HTML5 también para establecer un campo obligatorio.

<form action="email_processor.php">
  <label for="email_address>Email address</label>
  <input type="email" id="email_address" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$">
  <button type="submit">Submit form</button>
</form>

Configure su script PHP de validación (prueba) de correo electrónico

Puedes usar la API de validación de correo electrónico de Mailboxlayer con cualquier lenguaje de programación que pueda analizar una respuesta de datos con formato JSON. Visite la página de documentación para ver los ejemplos de códigos, códigos de error y cualquier otra información que necesite. Para este tutorial utilizaremos el ejemplo de PHP. Cree un nuevo archivo PHP y añada el siguiente código:

<?php
$access_key = 'YOUR_ACCESS_KEY';
$email_address = 'test@domain.com';

$ch = curl_init('http://apilayer.net/api/check?access_key='.$access_key.'&email='.$email_address.'');  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json_response = curl_exec($ch);
curl_close($ch);
$result = json_decode($json_response, true);
print_r($result);

Reemplaza la cadena «YOUR_ACCESS_KEY» con la clave de la API de Mailboxlayer y cambia la dirección de correo electrónico por otra. Asegure su script y ejecute el script PHP en su navegador o a través de la terminal. Verá una respuesta como esta:

array
(
    [email] => test@domain.com
    [did_you_mean] => test@hotmail.com
    [user] => test
    [domain] => domain.com
    [format_valid] => 1
    [mx_found] => 1
    [smtp_check] => 1
    [catch_all] =>
    [role] =>
    [disposable] =>
    [free] =>
    [score] => 0.48
)

Habrá notado que el servicio de validación de correo electrónico ha proporcionado una sugerencia para las direcciones de correo electrónico alojadas por los proveedores de servicios de correo electrónico más populares. Si introduce «test@domain.com», la respuesta muestra la sugerencia «test@hotmail.com» como posible dirección de correo electrónico válida. Juega un poco con el ejemplo para ver qué tipo de respuesta obtienes para las diferentes entradas. Fíjese también en el valor de «puntuación», un valor superior a 0,8 es un buen valor para las campañas de marketing por correo electrónico. Si utilizas las direcciones de correo electrónico recopiladas sólo para los correos electrónicos transaccionales, un valor superior a 0,65 es aceptable.

El siguiente ejemplo de código PHP mostrará un mensaje diferente sobre el éxito o el fracaso:

<?php
$access_key = 'YOUR_ACCESS_KEY';
$email_address = 'test@domain.com';

// Validate the email address always with filter_var($email, FILTER_VALIDATE_EMAIL)) 
// or similar before you create an API request

$ch = curl_init('http://apilayer.net/api/check?access_key='.$access_key.'&email='.$email_address.'');  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json_response = curl_exec($ch);
curl_close($ch);
if ($result = json_decode($json_response, true)) {
	if (floatval($result['score']) >= 0.8) { // or 0.65 for transactional emails
		echo 'The e-mail address '.$result['email'].' is valid.';
	} else {
		echo 'The entered e-mail address isn\'t valid.';
		if ($result['did_you_mean'] != '') echo ' Did you mean "'.$result['did_you_mean'].'"?';
	}
} else {
	echo 'Error, something went wrong';
}

Basándose en la respuesta, puede utilizar esta comprobación de validación de la dirección de correo electrónico para su formulario de contacto o su aplicación basada en el correo electrónico.

Validación de la dirección de correo electrónico del cliente usando jQuery

Ya lo he mencionado antes, puedes usar el API de Mailboxlayer con cualquier lenguaje de programación que pueda analizar una cadena JSON. Además de PHP, usamos mucho código jQuery para nuestros proyectos web. Usando el siguiente código JavaScript (jQuery) puedes comprobar una dirección de correo electrónico sin necesidad de recargar la página.

// set endpoint and your access key
var access_key = 'YOUR_ACCESS_KEY';
var email_address = 'support@apilayer.com';

// verify email address via AJAX call
$.ajax({
    url: 'http://apilayer.net/api/check?access_key=' + access_key + '&email=' + email_address,   
    dataType: 'jsonp',
    success: function(json) {

    // Access and use your preferred validation result objects
    console.log(json.format_valid);
    console.log(json.smtp_check);
    console.log(json.score);
                
    }
});

Este ejemplo de jQuery es una copia de la documentación de Mailboxlayer. Al utilizar este código, la clave de la API es visible para los bots y para cualquier otra persona que inspeccione el código fuente de su página. Utiliza este tipo de scripts del lado del cliente sólo en intranets o en un entorno local (de prueba). Si necesitas comprobar una dirección de correo electrónico utilizando JavaScript, sólo tienes que hacer una llamada Ajax a tu propio script PHP.

Proteja sus formularios web contra el spam de los formularios de comentarios. Hacemos esto a menudo usando el servicio reCaptcha de Google. Sin una protección sólida contra el spam, sus créditos gratuitos o de pago se utilizan rápidamente y eso sin resultado para su negocio.
Bono: Función PHP para comprobar una lista de direcciones de correo electrónico

Le sugerimos que vuelva a comprobar las direcciones de correo electrónico de su lista de correo si su última campaña fue enviada hace más de 6 meses. Hacemos lo mismo para las listas de nuestros clientes también con un pequeño script PHP. Utilizamos la API de Mailboxlayer para este trabajo. La suscripción al Plan Básico con 5000 solicitudes de API cuesta sólo $9.99 al mes y puede cancelar la suscripción cada mes. Siga estos pasos para limpiar su lista de correo:

Exporte todas sus direcciones de correo electrónico desde Mailchimp o cualquier otro proveedor de marketing por correo electrónico que utilice (sólo necesita una columna con la dirección de correo electrónico. Tal vez necesites editar el archivo .csv utilizando un editor de hojas de cálculo).
Descargue nuestro script PHP desde aquí y suba el script junto con su archivo de exportación .csv.
Cambie el nombre de su archivo .csv para que coincida con el nombre dentro del script y añada también su propia clave de la API de Mailboxlayer.
Ejecute el script PHP usando el modo de línea de comandos PHP (CLI). El script leerá tu archivo .csv y comprobará todas las direcciones de correo electrónico a través del sistema de la API. La respuesta del sistema Mailboxlayer se agrega al archivo llamado «emails-checked.csv».
Descarga / abre el archivo «emails-checked.csv» en tu editor de hojas de cálculo. Las direcciones de correo electrónico con una puntuación baja y/o con resultados que faltan para MX y/o SMTP son candidatas a ser eliminadas de tu lista de correo.

¿Qué es lo importante de la validación de la dirección de correo electrónico?

Utiliza siempre una segunda capa de validación de direcciones de correo electrónico si una dirección de correo electrónico válida es más que importante.
Valide el formato de la dirección de correo electrónico antes de enviar la dirección a Mailboxlayer, a créditos seguros de la API
Protege siempre tus formularios web públicos con un desafío de reCaptcha (otras herramientas como Akismet también están bien)
No uses la clave de la API de Mailboxlayer en el código público del lado del cliente (JavaScript)
Revise las direcciones de su lista de correo si su última campaña de correo electrónico fue enviada hace más de 6-9 meses.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *