
La verifica dei destinatari di SparkPost è ora disponibile sia per i clienti esistenti di SparkPost che per i nuovi clienti non invio. 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 verifica email basati sui dati più potenti disponibili sul mercato, così puoi inviare email in modo più intelligente.
Business in a box.
Scopri le nostre soluzioni.
Parla con il nostro team di vendita
SparkPost Recipient Validation è ora disponibile sia per i clienti SparkPost esistenti sia per i nuovi clienti, inclusi quelli che non inviano email. Utilizza una potente analisi basata sui dati su miliardi di eventi di rimbalzo, consegna e coinvolgimento giornalieri per addestrare il nostro algoritmo, offrendo uno degli strumenti di validazione email più potenti sul mercato, così puoi inviare email in modo più intelligente.
Questo articolo spiega come ottenere il massimo dai dati che riceverai su ciascun destinatario convalidato – vedrai che classifichiamo gli indirizzi come “validi”, “rischiosi”, “neutri”, “non recapitabili” e “errore di battitura”. Ti forniamo un codice “ragione” e anche un suggerimento “did_you_mean” per errori noti nell'indirizzo.
API richieste
Nell'app web di SparkPost, puoi trascinare e rilasciare un intero elenco per la convalida. Puoi anche utilizzare the API per convalidare singoli indirizzi, in modo da poter incorporare la convalida direttamente nel tuo flusso di lavoro di inserimento indirizzo.
Tempo fa abbiamo creato uno strumento da riga di comando Python usando questa API. Abbiamo discusso su cosa fare per altre lingue – ed eccoci qui! Iniziamo.
Questa cartella del repository Github contiene esempi di chiamate API di convalida destinatari funzionanti in circa una dozzina di lingue diverse. Cerchiamo di coprire le lingue applicabili più popolari.
Il modo comune di lavorare attraverso tutti questi esempi è:
Ottieni la tua chiave dalla variabile di ambiente
SPARKPOST_API_KEY
Esegui una chiamata API a
/api/v1/recipient-validation/single/
per convalidare un destinatarioRicevi una stringa di risposta, contenente dati in formato JSON con il risultato
Stampa il risultato
SparkPost ha librerie per alcune, ma non tutte, le lingue coperte qui. Abbiamo scelto di scrivere questi esempi in modo “nativo”, per poter a) coprire più lingue, b) mostrare quanto possa essere semplice il codice sottostante, e c) permetterti di vedere chiaramente le somiglianze e le differenze tra le lingue.
Bash / Curl
PHP
Il fidato PHP ha diversi modi per effettuare chiamate API HTTPS. Qui abbiamo scelto di utilizzare curl_setopt
e curl_exec
. (https://www.php.net/manual/en/function.curl-exec.php)
Se preferisci HTTP_Request2 o pecl_http, allora Postman ha un generatore di codice incorporato che puoi usare per creare esempi simili – basta configurare una richiesta GET funzionante e utilizzare il pulsante "Code".

Python
Questo utilizza il popolare modulo requests, che è di alto livello e quindi facile da usare. Questo esempio verifica il codice di stato restituito, converte il risultato JSON in un oggetto dizionario Python e stampa l'oggetto risultante anziché solo una stringa.
Se preferisci la libreria incorporata http.client, Postman può generare codice anche per quello; non è molto più lungo.
Node.js
Ci sono molti diversi librerie HTTP(S) node.js. Ho iniziato con il più vecchio pacchetto request (usando una funzione di callback) ma è deprecato e non è più mantenuto attivamente. Ho scelto il più recente pacchetto axios (usando promises).
Postman può anche fornire un esempio nativo in Javascript e Unirest, se si preferiscono quelli.
Poiché questo codice necessita dell'accesso alla tua chiave API, raccomandiamo fortemente di chiamare la nostra API dal tuo server-side, mai dal lato client (browser / dispositivo mobile).
Go
Go si sforza verso una filosofia di “one good way” per fare qualcosa; in questo caso, utilizzando le librerie integrate “batteries included” net/http, encoding/json e altre.
La lunghezza è dovuta principalmente alle clausole esplicite di controllo degli errori if err != nil {}
dappertutto (nessuna eccezione LOL).
Dichiariamo anche la struttura dell'oggetto dei risultati con tag di campo, per permetterci di “unmarshal” la stringa JSON restituita. Sovrapponiamo i tag “results” e “errors” per consentire entrambi i tipi di ritorno.
Amo la velocità, la sicurezza dei tipi e la chiarezza di Go, anche se il codice è più lungo rispetto ai nostri esempi precedenti.
C#
Non sono molto familiare con C# – per me, sembra piuttosto simile a Java, piuttosto che a C. Sono stato in grado di mettere insieme questo seguendo esempi mostrati nella libreria di richieste System.Net.Http.
Postman può generare automaticamente codice di esempio utilizzando RestSharp, se preferisci quello.
Ruby
Questo è stato il mio primo tentativo con il codice Ruby; ho usato la libreria Net::http e ho seguito questo esempio (che si rivela essere molto vicino al codice che Postman genera automaticamente).
Mi sono imbattuto in una particolarità di linguaggio/libro che vale la pena spiegare. Solo impostare un URI che inizia con “https://” non è sufficiente; è necessario specificare http.use_ssl = true
.
Senza questo, il tuo codice tenterà una richiesta sulla porta 443 – ma senza usare SSL/TLS (cioè in chiaro), e SparkPost giustamente si rifiuterà di autorizzare la richiesta. Non provarci a casa, perché la tua chiave API si trova nell'intestazione dell'Autorizzazione. Questa caratteristica di linguaggio/libro mi è sembrata insicura.
Java
Non ho mai scritto alcun serio Java prima d'ora, ma è stato facile assemblare questo seguendo l'approccio generale utilizzato nella libreria SparkPost per altre chiamate GET.
Tra l'altro, utilizzare VS Code come mio editor / debugger ha funzionato davvero bene per tutte le lingue qui, fornendomi evidenziazione della sintassi, passaggio del debugger / visualizzazione delle variabili ecc. Il InputStreamReader
e BufferedReader
sono simili a (e suppongo siano stati copiati da) Go.
C / C++
Questo è stato un viaggio nei ricordi, poiché ho scritto molto codice C negli anni '90, alcuni ancora operativi in profondità nelle reti di telecomunicazioni da qualche parte. Poiché la storia del C precede il Web moderno, non è sorprendente che il supporto delle librerie sia un compito manuale. Dobbiamo scaricare (e compilare) una versione recente di Libcurl, da collegare a una libreria OpenSSL – vedi il README per i passaggi effettivi.
Questo sembra molto lavoro rispetto ai linguaggi moderni, specialmente quando Go (o Lua, o Python, o qualsiasi altro) sono abbastanza veloci per compiti come questo.
L'altra cosa che avevo dimenticato, nonostante portassi le cicatrici di battaglie precedenti, è la paura dell'allocazione della memoria! Per mantenere l'esempio semplice, ho preallocato la lunghezza della stringa URL a 1024 caratteri e controllato i limiti della lunghezza dell'indirizzo email (usando strlen
) prima di concatenarli (usando 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 d'ambiente potrebbe essere qualsiasi cosa. È necessario programmare in modo difensivo.
Un sviluppatore più sofisticato potrebbe usare malloc
invece dell'allocazione delle variabili nello stack, e calcolare esattamente quanto lunghe devono essere le stringhe unite. Dover pensare a questa complessità extra 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 del buffer e effetti collaterali inaspettati. Il che ci porta a ..
Lua
Lua è noto per la sua facile coesistenza insieme a un corpo di codice C, e qui a SparkPost, abbiamo usato Lua ampiamente per le personalizzazioni delle policy all'interno del nostro MTA on-premises Momentum. Puoi anche usarlo come linguaggio di scripting stand-alone, ed è piuttosto buono anche per quello.
Con Lua 5.3 e il package manager luarocks, utilizziamo le librerie luasocket
e luasec
. Mostrando la sua eredità di integrazione C, ci colleghiamo alla nostra libreria OpenSSL locale. Il processo di installazione di luarocks chiama il compilatore gcc
(o qualunque compilatore C stiate utilizzando), quindi aggiungere nuove librerie richiede tempo.
Il codice in Lua è piuttosto 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 si fa con l'operatore .. (invece che + in Python).
Il corpo della risposta da questa chiamata è gestito con il modulo “ltn12” – vedi qui. Ciò consente una gestione efficiente dei dati che potrebbero essere restituiti in più “chunk”. Come spiega quell'articolo:
La factory di tabelle crea un sink che memorizza tutti i dati ottenuti in una tabella. I dati possono essere successivamente concatenati in modo efficiente in una singola stringa con la funzione di libreria table.concat.
Il nostro esempio semplicemente concatena la tabella t e la stampa; potresti usare un filtro per eseguire ulteriori elaborazioni.
Perl
Mentre Perl è famoso per le sue one liners, questa non è una di esse. Perl è stato progettato per una ricerca e modifica di documenti molto veloce, ma è in realtà capace di molto di più. Una volta ho scritto un intero sistema di controllo dell'Inventario in Perl. Chissà. C o m u n q u e…
Questo script utilizza LWP::UserAgent e HTTP::Request e, facoltativamente, i pacchetti JSON e Data::Dumper a seconda di come si desidera visualizzare l'output. Come con tutti gli altri script in questa pagina, dovresti preimpostare una variabile d'ambiente SPARKPOST_API_KEY
al tuo API key generato che include la funzione di Validazione del Destinatario. Questo script codifica il destinatario = 'test@gmail.com' ma puoi facilmente aggiungere l'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 utilizzare JSON e DUMPER per visualizzare il risultato o semplicemente passare l'array per ulteriori elaborazioni.
VB.net
Visual Basic non è visuale e non è basilare (IMHO), ma è al numero 6 nell'indice di linguaggio TIOBE, quindi eccoci qui.
Ci sono altri modi per farlo, ma il percorso più semplice verso il successo è utilizzare l'SDK Visual Studio su una piattaforma Windows. Avvia Visual Studio, crea un nuovo progetto e seleziona Visual Basic, poi seleziona console.app. Assicurati di usare la versione VB e non la versione C# – è facile non accorgersene nell'SDK.

A questo punto puoi modificare manualmente le righe o copiare/incollare il codice da qui in VS e risparmiare un sacco di tempo. Per far funzionare questo codice, devi aggiungere una variabile d'ambiente Windows. Il modo più semplice per farlo è aprire un prompt dei comandi e utilizzare setx.exe in questo modo:
C:\Users\me>setx SPARKPOST_API_KEY "142<redacted<redacted>c531c3"
In Windows 10, questo viene applicato al tuo ambiente utente, ma non è immediatamente disponibile nella sessione di comando corrente, quindi testarlo con un “set” non funzionerà, ma sarà disponibile per il codice. Se costruisci ed esegui il codice incluso nel repo, vedrai il risultato della convalida.
Rust
Rust è un linguaggio per la programmazione di sistemi e web-servizi che si concentra sulle prestazioni, sicurezza e concorrenza. Come dice Wikipedia, Rust è stato il “linguaggio di programmazione più amato” nel sondaggio degli sviluppatori di Stack Overflow dal 2016.
Il codice Rust nel nostro repository Github utilizza la libreria reqwest
con tokio
async, simile a questo esempio dal Rust cookbook. (Non è un errore di battitura, il nome della libreria reqwest
è scritto così). Abbiamo incluso un file di configurazione del gestore di pacchetti cargo file di configurazione, quindi puoi costruire ed eseguire con:
cd rust_recipient_validation cargo run
Questo compilerà il pacchetto in codice eseguibile e lo eseguirà:
Finito dev [non ottimizzato + informazioni di debug] target(s) in 0.10s Esecuzione `target/debug/rust_recipient_validation` Stato: 200 OK Corpo: : (ecc)
Il codice utilizza std:env
per leggere la variabile d'ambiente SPARKPOST_API_KEY
. Una clausola match gestisce il caso in cui la chiave non è definita. Se tutto va bene, viene creato un nuovo reqwest::Client
e viene avviata una chiamata async, seguita da un .await?
(vedi qui). Async, piuttosto che la più semplice chiamata bloccante, sembra necessario per impostare le intestazioni delle richieste. Il testo del corpo della risposta è letto con un secondo .await?
, come da questo esempio.
Riepilogo
In questo articolo, abbiamo esaminato esempi di codice di Validazione del Destinatario in molte lingue. Ecco la nostra richiesta per te.
Faccelo sapere se pensi che abbiamo tralasciato la tua lingua preferita. Potremmo non avere tanti esempi come The Fibonacci Project, ma ci piacerebbe aggiungerne altri. Inoltre, se pensi che i nostri esempi possano essere migliorati, faccelo sapere!