Skip to content
Empieza con 100 créditos de verificación gratis
Qualisend
Todos los artículos
Guías / 28 de junio de 2026

Cómo verificar correos en formularios de WordPress

8 minutes read

Qualisend team
Diagrama de un envío de formulario de WordPress que fluye a través de un hook de envío hacia la API de verificación de Qualisend y devuelve veredictos de entregable, arriesgado o no entregable.

Cualquier plugin de formularios de WordPress recopilará encantado asdf@asdf y un centenar de direcciones de Gmail con erratas, y luego se las pasará directamente a tu lista de correo. Para verificar correos en formularios de WordPress no necesitas un plugin nuevo: necesitas llamar a una API de verificación en el momento en que alguien envía el formulario, o exportar las entradas y limpiarlas en bloque. Esta guía muestra ambos caminos para los tres grandes plugins de formularios (Contact Form 7, WPForms, Gravity Forms) usando patrones que funcionan sin importar cuál utilices.

La respuesta corta#

Dos patrones admitidos, y el que elijas depende de tu plugin y de su plan:

  1. Tiempo real — engancha el evento de envío o validación del plugin y llama a la API de Qualisend antes de que se confirme la entrada. En la mayoría de los plugins esto es un pequeño fragmento de PHP en un filtro de validación (el único sitio donde puedes rechazar una dirección en el acto), o un paso de webhook en los niveles Pro para el etiquetado asíncrono.
  2. En bloque — exporta las entradas almacenadas del plugin a CSV y pásalas por el verificador en bloque de Qualisend de forma programada. Sin código, funciona en todos los planes que almacenan entradas.

Verificar correos en formularios de WordPress al enviar#

Casi todos los plugins de formularios disparan un evento del lado del servidor cuando llega un envío, y ese evento es tu punto de integración. La distinción importante es cuándo se dispara el hook, porque decide si puedes bloquear una dirección incorrecta o solo reaccionar ante ella:

Tipo de hookSe dispara¿Puede rechazar en el acto?
Filtro de validación (PHP)Antes de guardar la entradaSí — devuelve un error de campo que el visitante ve
Acción posterior al envío / webhookDespués de guardar la entradaNo — úsalo para etiquetar, enrutar o suprimir

Si quieres que el visitante vea «esa dirección no parece entregable» y la corrija, necesitas el filtro de validación, lo que implica algo de PHP. Si solo quieres mantener las direcciones muertas fuera de tu herramienta posterior, basta con un webhook y no hace falta código.

Aquí tienes el enfoque del filtro de validación sobre el filtro de validación de correo de Contact Form 7. La misma forma se traslada a Gravity Forms y WPForms: solo cambian el nombre del hook (gform_field_validation en Gravity Forms, wpforms_process en WPForms) y la manera en que adjuntas el error. Si tu plugin es Gravity Forms, la guía para verificar correos desde Gravity Forms recorre el hook gform_field_validation de principio a fin con el cableado exacto específico de GF. La clave de API vive en una constante de wp-config.php, nunca en un shortcode, un archivo de tema o JavaScript del lado del cliente:

// In a snippet plugin, or your theme's functions.php.
// In wp-config.php:  define( 'QUALISEND_API_KEY', 'YOUR_API_KEY' );

add_filter( 'wpcf7_validate_email*', 'qs_verify_email', 20, 2 );
add_filter( 'wpcf7_validate_email',  'qs_verify_email', 20, 2 );

function qs_verify_email( $result, $tag ) {
    $field = $tag->name;
    $email = isset( $_POST[ $field ] ) ? trim( wp_unslash( $_POST[ $field ] ) ) : '';
    if ( $email === '' ) {
        return $result; // let the plugin's own required-field check handle it
    }

    // Check /developers for the exact endpoint and request body.
    $response = wp_remote_post( 'https://api.qualisend.com/v1/verify', array(
        'timeout' => 4, // don't let a slow probe stall the form
        'headers' => array(
            'Authorization' => 'Bearer ' . QUALISEND_API_KEY,
            'Content-Type'  => 'application/json',
        ),
        'body' => wp_json_encode( array( 'email' => $email ) ),
    ) );

    // Fail open: never block a real visitor because our API had a bad moment.
    if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
        return $result;
    }

    $data    = json_decode( wp_remote_retrieve_body( $response ), true );
    $verdict = $data['result'] ?? array();

    if ( ( $verdict['status'] ?? '' ) === 'undeliverable' ) {
        $result->invalidate( $tag, "That address doesn't look deliverable — please check it." );
    } elseif ( ! empty( $verdict['sub_flags']['disposable'] ) ) {
        $result->invalidate( $tag, 'Please use a permanent email address.' );
    }

    return $result;
}

Tres cosas sostienen este fragmento, y son las mismas tres en todos los lenguajes: mantén la clave en el lado del servidor, limita la petición con un timeout corto y falla en abierto (fail open): si la llamada da error, agota el tiempo o devuelve algo distinto de un 200, deja pasar el envío. Una API de verificación es un filtro de calidad, no un guardián, y perder un lead real por una caída pasajera es el peor desenlace. Para la mecánica de la propia llamada a la API —cabeceras, gestión de errores, forma de la respuesta— la guía de validación de correo con PHP recorre la misma petición de principio a fin.

Si el PHP personalizado no es una opción, la alternativa sin código es un webhook. Si tu plugin ofrece webhooks —Gravity Forms mediante su Webhooks Add-On, WPForms mediante el addon Webhooks, ambos en licencias de nivel superior— apunta el webhook a una pequeña función serverless que guarde tu clave y llame a la API. La pega, según la tabla de arriba: estos webhooks se disparan después de guardar la entrada, así que no pueden mostrar un error en el acto. Lo que pueden hacer es verificar de forma asíncrona y actuar sobre el veredicto: añadir una etiqueta, saltarse el autorespondedor o descartar las direcciones no entregables antes de que lleguen siquiera a tu herramienta de correo. Un paso de webhook sin código (del tipo que exponen Zapier o Make) funciona igual: entra el envío del formulario, llamada a la API, sale el veredicto.

Que un plugin concreto exponga webhooks o te deje ejecutar PHP personalizado depende por completo del plugin y de su plan: la versión gratuita de Contact Form 7 te da el filtro de validación pero ninguna interfaz de webhooks; Gravity Forms y WPForms encierran los webhooks tras complementos de pago. Comprueba qué incluye tu nivel antes de comprometerte con una ruta.

Actuar sobre el veredicto#

La API devuelve un objeto result que contiene un status de deliverable, risky, undeliverable o unknown, más un score de 0 a 100, un código reason y sub-indicadores (sub-flags) de disposable, role, free y catch_all: el mismo $data['result'] que lee el fragmento de arriba. Asigna cada uno a una acción del formulario:

VeredictoAcción del formulario
undeliverableRechaza en el acto (filtro de validación) o descarta antes de enviar (webhook).
Indicador disposableRechaza o marca, según lo estricto que sea tu formulario — consulta direcciones de rol, desechables y gratuitas.
risky / catch-allAcepta, pero etiquétalo — envía al segmento catch-all con cuidado.
unknownAcepta. El servidor de correo no respondió — nunca pierdas un envío real por ello.
deliverableAcepta.

El veredicto local inmediato —sintaxis, dominio, desechable, rol— es lo que quieres en un formulario en vivo: llega rápido y captura el grueso de los envíos incorrectos. El sondeo SMTP del buzón, más pesado, encaja mejor en el camino en bloque de más abajo, donde unos segundos de latencia no importan. Si estás sopesando por qué cada comprobación se sitúa donde se sitúa, cómo funciona la verificación de correo desglosa el pipeline.

O verifica las entradas en bloque desde una exportación CSV#

No todos los formularios necesitan una barrera en tiempo real, y algunos plugins hacen incómodo el código personalizado. La alternativa sin código es dejar que los envíos se acumulen y limpiarlos de forma programada.

  1. Exporta las entradas a CSV. Gravity Forms tiene Importar/Exportar → Exportar entradas; WPForms tiene una exportación de entradas en Pro; Contact Form 7 no almacena nada por defecto, así que combínalo con el plugin gratuito Flamingo para capturar primero los envíos.
  2. Verifica el CSV en bloque. Súbelo al verificador en bloque de Qualisend, que ejecuta el pipeline completo —incluido el sondeo SMTP— en cada fila y te devuelve un archivo con puntuaciones.
  3. Filtra y sincroniza. Conserva las deliverable, revisa las risky y descarta las undeliverable antes de importar a las supervivientes en tu plataforma de correo.

Este es el mismo flujo de trabajo que cualquier limpieza de lista, solo que con origen en la tabla de entradas de tu formulario: la guía para limpiar una lista de correo cubre el bucle de exportar-verificar-reimportar al completo. La verificación en bloque es también la herramienta adecuada para las direcciones que ya recopilaste antes de añadir una comprobación en tiempo real: pasa el fondo de catálogo una vez y luego deja que el hook del momento del envío mantenga la lista limpia de aquí en adelante.

Tiempo real, en bloque o ambos#

Resuelven problemas distintos, así que la mayoría de los sitios acaban queriendo ambos:

  • El tiempo real es prevención. Una errata detectada en el envío es un lead salvado con una corrección de una línea; un dominio muerto rechazado ahí nunca se convierte en un rebote duro que dañe tu tasa de rebote.
  • El bloque es limpieza. Las direcciones se deterioran —la gente cambia de trabajo, los dominios caducan— así que incluso una lista perfectamente filtrada necesita una reverificación periódica.

Combinar un hook en el momento del envío con un pase en bloque mensual es la misma lógica que combinar la verificación con un flujo de doble opt-in: detén la basura evidente en la puerta y barre el resto de forma programada.

Preguntas frecuentes#

¿Puedo verificar correos en Contact Form 7 sin un complemento de pago?#

Sí. Contact Form 7 expone el filtro wpcf7_validate_email en su versión gratuita, así que un pequeño fragmento de PHP como el de arriba puede llamar a la API y rechazar en el acto las direcciones no entregables o desechables, sin necesidad de un complemento. Eso sí, necesitas poder añadir código (mediante el functions.php de tu tema o un plugin de fragmentos de código) y guardar tu clave de API en wp-config.php.

¿Puede un webhook de Gravity Forms o WPForms rechazar una dirección incorrecta en el acto?#

Normalmente no. Esos webhooks se disparan después de guardar la entrada, así que se ejecutan de forma asíncrona y no pueden mostrar al visitante un error de validación. Son ideales para etiquetar, enrutar o suprimir direcciones no entregables antes de que lleguen a tu herramienta de correo. Para un rechazo en el acto que el visitante vea, usa en su lugar el filtro de validación del plugin con PHP personalizado.

¿Existe un plugin nativo de Qualisend para WordPress?#

De momento no: nuestras integraciones nativas de plataforma se están reconstruyendo, y un conector para WordPress está en la hoja de ruta. Hasta que se publique, los enfoques admitidos son los dos de esta guía: llamar a la API REST desde un hook de formulario, un webhook o una función serverless, o exportar las entradas a CSV y verificarlas en bloque. Ambos usan la API documentada directamente.

¿Debería verificar en el envío o limpiar las entradas en bloque?#

Ambas cosas, por razones distintas. Verificar en el envío evita que los errores de escritura y las direcciones desechables entren siquiera en tu lista, con retroalimentación inmediata para el visitante. La verificación en bloque detecta direcciones que se deterioraron después de recopilarlas y limpia el fondo de catálogo que reuniste antes de añadir una comprobación en tiempo real. Un hook en el momento del envío más un pase periódico en bloque cubre ambas cosas.


¿Listo para montarlo? El plan gratuito incluye créditos para probar ambos caminos, la referencia de la API tiene la petición exacta a /verify para tu hook o función serverless, y el verificador de correo gratuito te deja probar puntualmente una sola dirección antes de que escribas una línea de código.

Your reputation, protected.

Clean your first list in minutes. 100 free credits, no card required.

Get started