Qualsiasi plugin di form per WordPress raccoglie senza battere ciglio asdf@asdf e un centinaio di indirizzi Gmail con errori di battitura, per poi passarli direttamente alla tua lista. Per verificare le email nei form di WordPress non ti serve un nuovo plugin: ti basta chiamare un'API di verifica nel momento in cui qualcuno invia il form, oppure esportare le voci e pulirle in blocco. Questa guida illustra entrambi i percorsi per i tre principali plugin di form (Contact Form 7, WPForms, Gravity Forms), con schemi che funzionano qualunque sia quello che usi.
In breve#
Gli schemi supportati sono due, e la scelta dipende dal plugin e dal suo piano:
- In tempo reale: aggancia l'evento di invio o di validazione del plugin e chiama l'API di Qualisend prima che la voce venga confermata. Nella maggior parte dei plugin si tratta di un piccolo snippet PHP su un filtro di validazione (l'unico punto in cui puoi rifiutare un indirizzo inline), oppure di un passaggio webhook sui piani Pro per il tagging asincrono.
- In blocco: esporta in CSV le voci salvate dal plugin e passale periodicamente al verificatore in blocco di Qualisend. Nessun codice, e funziona con ogni piano che salva le voci.
Verificare le email nei form di WordPress all'invio#
Quasi tutti i plugin di form attivano un evento lato server quando arriva un invio, e quell'evento è il tuo punto di integrazione. La distinzione importante è quando scatta l'hook, perché decide se puoi bloccare un indirizzo non valido o solo reagire:
| Tipo di hook | Quando scatta | Può rifiutare inline? |
|---|---|---|
| Filtro di validazione (PHP) | Prima che la voce venga salvata | Sì: restituisce un errore sul campo visibile al visitatore |
| Azione post-invio / webhook | Dopo che la voce è stata salvata | No: usalo per aggiungere tag, instradare o sopprimere |
Se vuoi che il visitatore veda "quell'indirizzo non sembra recapitabile" e lo corregga, ti serve il filtro di validazione, quindi un po' di PHP. Se vuoi solo tenere gli indirizzi morti fuori dallo strumento a valle, basta un webhook, che non richiede codice.
Ecco questo approccio applicato al filtro di validazione email di Contact Form 7. La stessa struttura si adatta a Gravity Forms e WPForms: cambiano solo il nome dell'hook (gform_field_validation su Gravity Forms, wpforms_process su WPForms) e il modo in cui associ l'errore. Se il tuo plugin è Gravity Forms, la guida alla verifica delle email da Gravity Forms illustra dall'inizio alla fine l'hook gform_field_validation, con i dettagli esatti di implementazione per GF. La chiave API sta in una costante di wp-config.php, mai in uno shortcode, in un file del tema o nel JavaScript front-end:
// 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://app.qualisend.com/api/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;
}
A reggere questo snippet sono tre cose, le stesse in qualsiasi linguaggio: tieni la chiave lato server, limita la richiesta con un timeout breve e applica il fail open (se la chiamata va in errore, scade o restituisce un codice diverso da 200, lascia passare l'invio). Un'API di verifica è un filtro di qualità, non un buttafuori, e perdere un lead reale per un'interruzione temporanea è il risultato peggiore. Per i dettagli della chiamata API (intestazioni, gestione degli errori, forma della risposta), la guida alla validazione delle email in PHP illustra la stessa richiesta dall'inizio alla fine.
Se non puoi usare PHP personalizzato, l'alternativa senza codice è un webhook. Se il tuo plugin offre webhook (Gravity Forms tramite il suo Webhooks Add-On, WPForms tramite il Webhooks addon, entrambi con licenze di fascia alta), punta il webhook a una piccola funzione serverless che custodisce la tua chiave e chiama l'API. Il limite, come mostra la tabella sopra: questi webhook scattano dopo il salvataggio della voce, quindi non possono mostrare un errore inline. Quello che possono fare è verificare in modo asincrono e agire in base all'esito: aggiungere un tag, saltare l'autoresponder o scartare gli indirizzi non recapitabili prima che arrivino al tuo strumento di email. Un passaggio webhook senza codice (come quelli offerti da Zapier o Make) funziona allo stesso modo: invio del form in entrata, chiamata API, esito in uscita.
Se un plugin esponga webhook o ti consenta di eseguire PHP personalizzato dipende interamente dal plugin e dal suo piano: la versione gratuita di Contact Form 7 ti dà il filtro di validazione ma nessuna interfaccia per i webhook, mentre Gravity Forms e WPForms riservano i webhook agli add-on a pagamento. Controlla cosa include il tuo piano prima di scegliere una strada.
Agire in base all'esito#
L'API restituisce un oggetto result che contiene uno status tra deliverable, risky, undeliverable e unknown, più uno score da 0 a 100, un codice reason e indicatori aggiuntivi per disposable, role, free_mail e catch_all: è lo stesso $data['result'] letto dallo snippet qui sopra. Associa ciascun valore a un'azione del form:
| Esito | Azione del form |
|---|---|
undeliverable | Rifiuta inline (filtro di validazione) o scarta prima dell'invio delle email (webhook). |
Indicatore disposable | Rifiuta o contrassegna, a seconda di quanto è rigoroso il tuo form: vedi indirizzi generici, usa e getta e gratuiti. |
risky / catch-all | Accettalo, ma aggiungi un tag: invia con cautela al segmento catch-all. |
unknown | Accettalo. Il server di posta non ha risposto: non perdere mai un invio reale per questo. |
deliverable | Accettalo. |
L'esito locale immediato (sintassi, dominio, usa e getta, generico) è quello che ti serve su un form attivo: arriva in fretta e intercetta la maggior parte degli invii non validi. La verifica SMTP della casella, più pesante, si adatta meglio al percorso in blocco qui sotto, dove qualche secondo di latenza non conta. Se vuoi capire perché ogni controllo sta dove sta, come funziona la verifica email analizza l'intera pipeline.
Oppure verifica le voci in blocco da un'esportazione CSV#
Non tutti i form hanno bisogno di un controllo in tempo reale, e alcuni plugin rendono scomodo il codice personalizzato. L'alternativa senza codice è lasciare che gli invii si accumulino e pulirli a intervalli regolari.
- Esporta le voci in CSV. Gravity Forms ha Import/Export → Export Entries; WPForms ha un'esportazione delle voci sul piano Pro; Contact Form 7 di default non salva nulla, quindi abbinalo al plugin gratuito Flamingo per registrare prima gli invii.
- Verifica il CSV in blocco. Caricalo nel verificatore in blocco di Qualisend, che esegue l'intera pipeline, verifica SMTP inclusa, su ogni riga e restituisce un file con i punteggi.
- Filtra e sincronizza. Tieni i
deliverable, controlla iriskye scarta gliundeliverableprima di importare quelli rimasti nella tua piattaforma email.
È lo stesso flusso di qualsiasi pulizia di una lista, solo che la fonte è la tabella delle voci del form: la guida alla pulizia di una lista email descrive per intero il ciclo esporta-verifica-reimporta. La verifica in blocco è anche lo strumento giusto per gli indirizzi raccolti prima di aggiungere un controllo in tempo reale: verifica una volta l'archivio, poi lascia che l'hook all'invio mantenga pulita la lista da lì in avanti.
Tempo reale, in blocco o entrambi#
I due approcci risolvono problemi diversi, quindi la maggior parte dei siti finisce per volerli entrambi:
- Il tempo reale è prevenzione. Un errore di battitura intercettato all'invio è un lead salvato con una correzione di una riga; un dominio morto rifiutato in quel momento non diventa mai un hard bounce che intacca il tuo tasso di bounce.
- Il percorso in blocco è pulizia. Gli indirizzi si deteriorano (le persone cambiano lavoro, i domini scadono), quindi anche una lista perfettamente filtrata ha bisogno di una nuova verifica periodica.
Abbinare un hook all'invio a un passaggio mensile in blocco segue la stessa logica di combinare la verifica con un flusso double opt-in: fermi la spazzatura evidente all'ingresso e passi a intervalli regolari a raccogliere il resto.
Domande frequenti
01Posso verificare le email in Contact Form 7 senza un add-on a pagamento?
Sì. Contact Form 7 espone il filtro wpcf7_validate_email nella versione gratuita, quindi un piccolo snippet PHP come quello riportato sopra può chiamare l'API e rifiutare inline gli indirizzi non recapitabili o usa e getta, senza alcun add-on. Devi però poter aggiungere codice (tramite il file functions.php del tema o un plugin per snippet) e salvare la tua chiave API in wp-config.php.
02Un webhook di Gravity Forms o WPForms può rifiutare inline un indirizzo non valido?
Di solito no. Questi webhook scattano dopo il salvataggio della voce, quindi funzionano in modo asincrono e non possono mostrare al visitatore un errore di validazione. Sono ideali per aggiungere tag, instradare o sopprimere gli indirizzi non recapitabili prima che arrivino al tuo strumento di email. Per un rifiuto inline visibile al visitatore, usa invece il filtro di validazione del plugin con PHP personalizzato.
03Esiste un plugin nativo di Qualisend per WordPress?
Al momento no: le nostre integrazioni native con le piattaforme sono in fase di ricostruzione e un connettore WordPress è nella roadmap. Finché non sarà disponibile, gli approcci supportati sono i due descritti in questa guida: chiamare l'API REST da un hook del form, un webhook o una funzione serverless, oppure esportare le voci in CSV e verificarle in blocco. Entrambi usano direttamente l'API documentata.
04Devo verificare all'invio o pulire le voci in blocco?
Entrambe le cose, per motivi diversi. La verifica all'invio impedisce a errori di battitura e indirizzi usa e getta di entrare nella lista, con un riscontro immediato per il visitatore. La verifica in blocco intercetta gli indirizzi deteriorati dopo la raccolta e pulisce l'archivio accumulato prima di aggiungere un controllo in tempo reale. Un hook all'invio più un passaggio periodico in blocco coprono entrambi i casi.
Pronto a collegare tutto? Il piano Free include crediti per provare entrambi i percorsi, il riferimento API riporta la richiesta /verify esatta per il tuo hook o la tua funzione serverless, e la verifica email gratuita ti consente di provare un singolo indirizzo prima di scrivere una riga di codice.



