Validazione del destinatario: Esempi di codice di verifica email
·
8 lug 2020

Punti Chiave
Validazione basata sui dati, non congetture. La Validazione dei Destinatari di Bird (precedentemente SparkPost) utilizza miliardi di eventi di consegna e coinvolgimento reali per determinare se un indirizzo email è valido, rischioso, non consegnabile o contiene un errore di battitura.
Più intelligente dei controlli di sintassi. A differenza degli strumenti tradizionali basati su regex, questo modello utilizza dati del mondo reale per classificare la capacità di consegna e persino suggerisce correzioni con una funzione “did_you_mean”.
Integrazione in tempo reale. Convalida indirizzi email direttamente all'interno dei tuoi moduli di registrazione, CRM o liste in blocco tramite l'endpoint API /recipient-validation/single/.
Esempi orientati agli sviluppatori. Snippet di codice funzionanti sono disponibili in più linguaggi di programmazione — inclusi Python, Node.js, PHP, Go, C#, Ruby, Java, Rust e altro — per semplificare l'integrazione.
Pratica di sicurezza migliore. Le chiavi API dovrebbero sempre essere memorizzate lato server (mai esposte nel codice lato client), utilizzando variabili di ambiente come SPARKPOST_API_KEY.
Oltre la validazione. Combina la Validazione dei Destinatari con consumatori webhook o Azure Functions per costruire flussi di lavoro di verifica scalabili e senza server per l'uso in produzione.
Miglioramento continuo. Gli sviluppatori sono incoraggiati a contribuire con esempi in altre lingue, assicurando accessibilità globale tra gli ecosistemi.
Punti salienti del Q&A
Cos'è la Validazione del Destinatario?
È il sistema di convalida email alimentato dall'API di Bird che classifica gli indirizzi come valido, a rischio, neutrale, non consegnabile o errore di battitura, sfruttando i dati provenienti da miliardi di eventi di consegna nel mondo reale.
Come si differenzia dalla validazione della sintassi di base?
I validatori tradizionali controllano solo il formato; il sistema di Bird valuta dati in tempo reale come i tassi di rimbalzo, le metriche di coinvolgimento e i pattern di consegna per fare previsioni più intelligenti.
Che tipo di informazioni restituisce l'API?
Ogni risposta di convalida include:
Classificazione dello stato (valido, rischioso, ecc.)
Codice di motivo (perché un indirizzo è segnalato)
Correzione “did_you_mean” opzionale per errori di battitura
Metadati come prezzi, paese e campi del motivo dello stato
Posso convalidare le email in massa?
Sì. Puoi caricare intere liste nell'app web o utilizzare l'API per convalidare indirizzi singoli in modo programmatico come parte del tuo flusso di lavoro.
Quali linguaggi di programmazione sono supportati?
Gli esempi di codice sono disponibili per più di una dozzina di lingue — inclusi Python, Node.js, PHP, Go, C#, Java, Rust e Perl — coprendo sia sistemi moderni che legacy.
Dove dovrei conservare la mia chiave API?
È sempre opportuno tenerlo lato server utilizzando una variabile d'ambiente come
SPARKPOST_API_KEY. Non integrarlo mai in script lato client o codice del browser.Può questo essere integrato nei flussi di lavoro automatizzati?
Assolutamente. Puoi utilizzare il Flow Builder di Bird o Azure Functions per convalidare gli indirizzi in tempo reale prima di attivare l'automazione a valle, come le email di conferma o gli aggiornamenti del CRM.
Perché le aziende dovrebbero preoccuparsi dell'accuratezza della validazione?
La convalida di alta qualità migliora la reputazione del mittente, previene i rimbalzi e aumenta il ROI delle campagne assicurando che ogni messaggio raggiunga una casella di posta valida.
Cosa c'è dopo per gli sviluppatori?
Bird invita contributi dalla comunità per nuovi esempi di lingua e miglioramenti a quelli esistenti, aiutando ad ampliare l'accessibilità alla convalida in tutto il mondo.
La validazione dei destinatari di SparkPost è ora disponibile sia per i clienti esistenti di SparkPost che per i nuovi clienti che non inviano. Utilizza un'analisi potente basata sui dati su miliardi di eventi di rimbalzo, consegna e coinvolgimento quotidiani per addestrare il nostro algoritmo, offrendoti uno degli strumenti di validazione delle email basati sui dati più potenti sul mercato, così puoi inviare email in modo più intelligente.
SparkPost Validazione del destinatario è ora disponibile sia per i clienti SparkPost esistenti sia per i nuovi clienti che non inviano. Utilizza un'analisi potente basata sui dati su miliardi di eventi di rimbalzo, consegna e coinvolgimento ogni giorno per addestrare il nostro algoritmo, offrendoti uno degli strumenti di validazione email basati sui dati più potenti sul mercato, per poter inviare email in modo più intelligente. Questo rappresenta l'ultima evoluzione nelle tecniche di validazione email, spostandosi oltre i semplici controlli di sintassi verso approcci sofisticati basati sui dati che forniscono risultati più accurati.
Questo articolo spiega come puoi sfruttare al meglio i dati che riceverai su ogni destinatario validato: vedrai che classifichiamo gli indirizzi come “validi”, “rischiosi”, “neutri”, “non consegnabili” e “errore di battitura”. Ti forniamo un codice “motivazione” e anche un “did_you_mean” per gli errori di battitura degli indirizzi noti.
C#
Sono meno familiare con C# – per me, sembra piuttosto simile a Java, piuttosto che a C. Sono riuscito a mettere insieme questo seguendo gli esempi mostrati nella libreria delle richieste System.Net.Http.
Postman può generare automaticamente codice di esempio utilizzando RestSharp, se lo preferisci.
Richieste API
nell'app web SparkPost, puoi trascinare e rilasciare un'intera lista per la convalida. Puoi anche usare l'API per convalidare indirizzi singoli, in modo da poter integrare la convalida direttamente nel tuo flusso di lavoro di inserimento indirizzi.
Un po' di tempo fa, abbiamo ideato un strumento da riga di comando Python utilizzando questa API. Abbiamo discusso su cosa dovremmo fare per altri linguaggi – ed eccoci qui! Iniziamo.
Questa cartella del repository Github contiene esempi funzionanti di chiamate all'API di convalida dei destinatari in circa una dozzina di lingue diverse. Cerchiamo di coprire i linguaggi applicabili più popolari.
Il modo comune di lavorare attraverso tutti questi esempi è:
Prendi la tua chiave dalla variabile ambiente
SPARKPOST_API_KEYEffettua una chiamata API a
/api/v1/recipient-validation/single/per convalidare un destinatarioRicevi indietro una stringa di risposta, contenente dati formattati in JSON con il risultato
Stampa il risultato
Lingua | Library HTTP utilizzata | Luogo in cui avviene la convalida | Considerazioni notevoli |
|---|---|---|---|
Bash / Curl | curl CLI | Uso solo da terminale | Nessun parsing della risposta JSON |
PHP | curl_setopt | Server-side | Multiple options della library disponibili |
Python | requests | Script o app di backend | Converte automaticamente JSON in dict |
Node.js | axios (raccomandato) | Solo lato server | Evitare di esporre chiavi API lato client |
Go | net/http + encoding/json | Servizi backend | Robusta sicurezza di tipo con strutture personalizzate |
C# | System.Net.Http | Applicazioni server | Postman può generare la versione RestSharp |
Java | HttpURLConnection | Servizi server | Verboso ma ampiamente distribuibile |
C / C++ | libcurl + OpenSSL | Strumenti a livello di sistema | Richiesta di sicurezza della memoria manuale |
Lua | luasocket + luasec | Compagno di scripting | Può trasmettere in modo efficiente le risposte a chunk |
Perl | LWP::UserAgent | Sistemi legacy | Parsing JSON opzionale |
VB.net | Visual Studio SDK | App console Windows | Richiesta di setup della variabile ambiente |
Rust | reqwest + tokio async | Servizi web moderni | Async necessario per la gestione delle intestazioni |
SparkPost ha librerie per alcune, ma non tutte le lingue trattate qui. Abbiamo scelto di scrivere questi esempi “nativi” invece, così da poter a) coprire più lingue, b) mostrare quanto può essere semplice il codice sottostante e c) permetterti di vedere chiaramente le similarità e le differenze tra i linguaggi.
Bash / Curl
Questo vince il premio per il codice più corto: utilizza semplicemente lo strumento da riga di comando “curl” per effettuare la richiesta e stampare direttamente la risposta nel terminale. Puoi vedere che l'output è una stringa, contenente JSON; non analizziamo effettivamente i singoli attributi del risultato.
PHP
Trusty PHP ha diversi modi per effettuare chiamate API HTTPS. Qui, abbiamo scelto di utilizzare curl_setopt insieme a curl_exec.
Se preferisci HTTP_Request2 o pecl_http, Postman ha un generatore di codice integrato che puoi utilizzare per creare esempi simili: basta impostare una richiesta GET funzionante e utilizzare il pulsante “Codice”.

Python
Questo utilizza il popolare modulo requests, che è di alto livello e quindi facile da usare. Questo esempio controlla il codice di stato restituito, converte i risultati JSON di nuovo in un oggetto dizionario Python e stampa l'oggetto risultante piuttosto che solo una stringa.
Se preferisci la libreria integrata http.client, Postman può generare codice anche per quella; non è molto più lungo.
Node.js
Ci sono molti diversi librerie HTTP(S) di node.js. Ho iniziato con il vecchio pacchetto request (utilizzando una funzione di callback) ma è deprecato e non è più attivamente mantenuto. Ho scelto il nuovo pacchetto axios (utilizzando promesse).
Postman può anche fornirti un esempio nativo di Javascript e Unirest, nel caso tu preferisca quelli.
Poiché questo codice ha bisogno di accesso alla tua chiave API, ti consigliamo vivamente di chiamare la nostra API dal lato server, mai dal lato client (browser / dispositivo mobile).
Vai
Go si sforza verso una filosofia di “un buon modo” per fare qualcosa; in questo caso, utilizzando le librerie incorporate “batteries included” net/http, encoding/json e altre.
La lunghezza è dovuta soprattutto alle clausole di controllo degli errori esplicite if err != nil {} ovunque (nessuna eccezione LOL).
Dichiarando anche la struttura dell'oggetto risultati con i tag di campo, possiamo “unmarshal” la stringa JSON restituita. Sovrapponiamo i tag “risultati” e “errori” per consentire entrambi i tipi di ritorno.
Mi piace la velocità, la sicurezza dei tipi e la chiarezza di Go, anche se il codice è più lungo rispetto ai nostri esempi precedenti.
Java
Non ho mai scritto Java serio prima, ma è stato facile assemblare questo seguendo l'approccio generale utilizzato nella libreria SparkPost per altre chiamate GET.
Per inciso, utilizzare VS Code come mio editor / debugger ha funzionato davvero bene per tutti i linguaggi qui, offrendomi evidenziazione della sintassi, passo passo del debugger / visualizzazione delle variabili ecc. The InputStreamReader e BufferedReader sono costrutti simili a (e suppongo siano stati copiati da) Go.
C / C++
È stata un viaggio nei ricordi, poiché ho scritto molti codici C negli anni '90, alcuni dei quali sono ancora in funzione profondamente in qualche rete di telecomunicazioni. Poiché la storia del C precede il Web moderno, non sorprende che il supporto delle librerie sia un compito manuale. Dobbiamo scaricare (e compilare) una versione recente di Libcurl, collegandosi a una libreria OpenSSL – vedere il README per i passaggi effettivi.
Questo sembra un sacco di lavoro rispetto ai linguaggi moderni, in particolare quando Go (o Lua, o Python, o qualsiasi altro) sono abbastanza veloci per compiti come questo.
L'altra cosa che avevo dimenticato, nonostante porti le cicatrici di battaglie precedenti, è l'angoscia dell'allocazione della memoria! Per mantenere l'esempio semplice, ho preallocato la lunghezza della stringa URL a 1024 caratteri e ho controllato i limiti della lunghezza dell'indirizzo email (usando strlen) prima di concatenarlo (utilizzando strcat).
Trattiamo la stringa di autorizzazione con una chiave API concatenata allo stesso modo .. anche se sappiamo che una chiave API valida non sarà mai troppo lunga .. questo non è una protezione! L'input dell'utente proveniente da una variabile di ambiente potrebbe essere qualsiasi cosa. Devi programmare in modo difensivo.
Un sviluppatore più sofisticato potrebbe usare malloc invece dell'allocazione di variabili nello stack e calcolare esattamente quanto devono essere lunghe le stringhe unite. Pensare a questa complessità aggiuntiva mi ha dato un dolore nei diodi sul lato sinistro; mi ha ricordato i rischi che i programmatori C corrono ogni giorno, cercando di evitare sovraccarichi di buffer e effetti collaterali imprevisti. Questo ci porta a ..
Lua
Lua è conosciuto per la sua facile coesistenza accanto a un corpo di codice C, e qui a SparkPost, abbiamo utilizzato Lua ampiamente per le personalizzazioni delle policy all'interno del nostro MTA on-premises Momentum. Puoi anche usarlo come linguaggio di scripting autonomo, ed è piuttosto utile anche per questo.
Con Lua 5.3 e il gestore di pacchetti luarocks, utilizziamo le librerie luasocket e luasec. Mostrando il suo patrimonio di integrazione C, ci colleghiamo alla nostra libreria OpenSSL locale. Il processo di installazione di luarocks chiama il compilatore gcc (o qualunque compilatore C tu stia utilizzando), quindi l'aggiunta di nuove librerie richiede un po' di tempo.
Il codice Lua è abbastanza semplice. I caratteri — segnano i commenti. La funzione https.request fornisce valori di ritorno multipli (un po' come Python e Go). La concatenazione delle stringhe viene effettuata con l'operatore .. (invece di + in Python).
Il corpo della risposta da questa chiamata viene gestito con il modulo ‘ltn12’ – vedere la pagina wiki di Lua su Filtri, Sorgenti e Sinks. Questo consente una gestione efficiente dei dati che potrebbero essere restituiti in più “chunk”. Come spiega quell'articolo:
La fabbrica di tabelle crea un sink che memorizza tutti i dati ottenuti in una tabella. I dati possono successivamente essere concatenati in modo efficiente in una singola stringa con la funzione di libreria table.concat.
Il nostro esempio concatena semplicemente la tabella t e la stampa; potresti utilizzare un filtro per eseguire ulteriori elaborazioni.
Perl
mentre Perl è famoso per le sue linee singole, questa non è una di esse. Perl è stato progettato per ricerche e modifiche di documenti molto veloci, ma in realtà è capace di molto di più. Una volta ho scritto un intero suite di controllo dell'inventario in Perl. Vai a capire. Comunque…
Questo script sfrutta LWP::UserAgent e HTTP::Request e opzionalmente i pacchetti JSON e Data::Dumper a seconda di come vuoi visualizzare l'output. Come con tutti gli altri script su questa pagina, dovresti impostare in anticipo una variabile ambiente SPARKPOST_API_KEY al tuo API key generato che include la funzione di Validazione del Destinatario. Questo script imposta $recipient = ‘test@gmail.com’ ma puoi facilmente aggiungere input da riga di comando o consumare da un file.
Dopo che tutte le variabili sono state popolate, carichiamo un HTTP:Request con parametri GET e lo inviamo a LWP:UserAgent. Il “messaggio” risultante è il risultato del test di validazione dell'email come array. Puoi usare JSON e DUMPER per visualizzare il risultato o semplicemente passare l'array per ulteriori elaborazioni.
VB.net
Ruggine
Riepilogo
In questo articolo, abbiamo visto esempi di codice per la Validazione del Destinatario in molte lingue. Ecco la nostra richiesta per te.
Facci sapere se pensi che ci siamo persi la tua lingua preferita. Potremmo non avere tanti esempi come Il Progetto Fibonacci, ma ci piacerebbe aggiungerne di più. Inoltre, se pensi che i nostri esempi possano essere migliorati, faccelo sapere!




