Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

Validazione del destinatario: esempi di codice di verifica email

Uccello

8 lug 2020

Email

1 min read

Validazione del destinatario: esempi di codice di verifica email

Uccello

8 lug 2020

Email

1 min read

Validazione del destinatario: esempi di codice di verifica email

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.

SparkPost Recipient Validation è ora disponibile sia per i clienti SparkPost esistenti che per i nuovi clienti non invianti. Utilizza un'analisi potente 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 basati sui dati più potenti sul mercato, così puoi inviare email in modo più intelligente. Questo rappresenta l'ultima evoluzione nelle tecniche di validazione email, andando oltre i semplici controlli di sintassi, verso approcci sofisticati basati sui dati che forniscono risultati più accurati.

Questo articolo spiega come puoi ottenere il massimo dai dati che riceverai su ciascun destinatario convalidato – vedrai che classifichiamo gli indirizzi come “valido”, “rischioso”, “neutro”, “non consegnabile” e “errore di battitura”. Ti forniamo un codice di “reason” e anche un “did_you_mean” per errori di battitura noti negli indirizzi.

API richieste

Nell'app web di SparkPost, puoi trascinare e rilasciare un'intera lista per la validazione. Puoi anche usare l'API per validare singoli indirizzi, in modo da poter integrare la validazione direttamente nel flusso di lavoro di inserimento indirizzi.

Un po' di 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 funzionanti di chiamate API di Validazione Destinatari in una dozzina di lingue diverse. Cerchiamo di coprire le lingue applicabili più popolari.

Il modo comune di lavorare attraverso tutti questi esempi è:

  • Recupera la tua chiave dalla variabile d'ambiente SPARKPOST_API_KEY

  • Esegui una chiamata API a /api/v1/recipient-validation/single/ per validare un destinatario

  • Ricevi una stringa di risposta, contenente dati formattati in JSON con il risultato

  • Stampa il risultato

SparkPost ha librerie per alcune, ma non tutte le lingue trattate qui. Abbiamo scelto di scrivere questi esempi in modo "nativo" invece, per poter a) coprire più lingue, b) mostrare quanto semplice possa essere il codice sottostante e c) permetterti di vedere chiaramente le somiglianze e le differenze tra le lingue.

Bash / Curl

Questo vince il premio per il codice più breve: utilizza semplicemente lo strumento da riga di comando "curl" per effettuare la richiesta e stampare la risposta direttamente sul terminale. Puoi vedere che l'output è una stringa, contenente JSON; in realtà non analizziamo gli attributi del risultato individuale.

Questo vince il premio per il codice più breve: utilizza semplicemente lo strumento da riga di comando "curl" per effettuare la richiesta e stampare la risposta direttamente sul terminale. Puoi vedere che l'output è una stringa, contenente JSON; in realtà non analizziamo gli attributi del risultato individuale.

Questo vince il premio per il codice più breve: utilizza semplicemente lo strumento da riga di comando "curl" per effettuare la richiesta e stampare la risposta direttamente sul terminale. Puoi vedere che l'output è una stringa, contenente JSON; in realtà non analizziamo gli attributi del risultato individuale.

PHP

Il fidato PHP ha diversi modi per effettuare chiamate API HTTPS. Qui abbiamo scelto di usare 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 integrato che puoi usare per creare esempi simili - basta configurare una richiesta GET funzionante e usare il pulsante “Code”.

Postman interface used for API testing, featuring a "Single Address Validation" endpoint with GET parameters, a Headers section showing Authorization and Accept keys, and a highlighted area labeled "Cookies" and "Code" on the right side.

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 il JSON dei risultati di nuovo in un oggetto dizionario Python e stampa l'oggetto risultante invece di una semplice stringa.

Se preferisci la libreria http.client incorporata, Postman può generare codice anche per quello; non è molto più lungo.

Node.js

Ci sono molte diverse librerie HTTP(S) node.js. Ho iniziato con il vecchio pacchetto request (utilizzando una funzione di callback) ma è deprecato e non più mantenuto attivamente. Ho scelto il nuovo pacchetto axios (utilizzando promises).

Postman può anche fornirti un esempio nativo Javascript e Unirest, nel caso tu preferisca quelli.

Poiché questo codice necessita dell'accesso alla tua chiave API, raccomandiamo vivamente di chiamare la nostra API dal tuo lato server, 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 di controllo degli errori espliciti if err != nil {} ovunque (senza eccezioni LOL).

Dichiariamo anche la struttura dell'oggetto results con tag di campo, per permetterci di “unmarshal” la stringa JSON restituita. Sovrapponiamo i tag “results” ed “errors” per consentire entrambi i tipi di ritorno.

Mi piace la velocità, la type-safety 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 abbastanza simile a Java, piuttosto che a C. Sono stato in grado di mettere questo insieme seguendo gli esempi mostrati nella libreria di richieste System.Net.Http.

Postman può generare automaticamente codice di esempio usando RestSharp, se preferisci.

Ruby

Questo è stato il mio primo tentativo con il codice Ruby; ho usato la libreria Net::http, e ho seguito questo esempio (che si scopre essere molto vicino al codice che Postman auto-genera).

Ho incontrato un'anomalia del linguaggio/libreria che vale la pena spiegare. Solo impostare un URI che inizia con “https://” non è sufficiente, devi specificamente impostare 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 rifiuterà di autorizzare la richiesta. Non provare questo a casa, perché la tua chiave API è nell'intestazione di Autorizzazione. Questa caratteristica del linguaggio/libreria mi è sembrata poco sicura.

Java

Non ho mai scritto del Java serio prima, ma è stato facile mettere insieme il tutto seguendo l'approccio generale utilizzato nella libreria SparkPost per altre chiamate GET.

Per inciso, usare VS Code come mio editor / debugger ha funzionato davvero bene per tutte le lingue qui, dandomi evidenziazione della sintassi, step del debugger / visualizzazione delle variabili ecc. The InputStreamReader e BufferedReader costrutti sono simili a (e presumo siano stati copiati da) Go.

C / C++

Questo è stato un tuffo nei ricordi, poiché ho scritto molto codice C negli anni '90, alcuni dei quali ancora funzionanti nelle reti di telecomunicazioni da qualche parte. Poiché la storia di 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, collegandola a una libreria OpenSSL – vedi 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 le cicatrici delle 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 la lunghezza dell'indirizzo email (usando strlen) prima di concatenarlo (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... ciò non è una protezione! L'input dell'utente proveniente da una variabile d'ambiente potrebbe essere qualsiasi cosa. Devi programmare in modo difensivo.

Uno sviluppatore più sofisticato potrebbe usare malloc invece di allocare variabili nello stack, e calcolare esattamente quanto devono essere lunghe le stringhe unite. Dover 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 inaspettati. Il che ci porta a ..

Lua

Lua è noto per la sua facile convivenza accanto a un corpo di codice C, e qui a SparkPost, usiamo Lua ampiamente per le personalizzazioni delle Policy all'interno del nostro MTA on-premise Momentum. Puoi anche usarlo come linguaggio di scripting autonomo, ed è abbastanza carino anche per quello.

Con Lua 5.3 e il gestore di pacchetti luarocks, usiamo le librerie luasocket e luasec. Mostrando la sua eredità di integrazione C, colleghiamo alla nostra libreria locale OpenSSL. Il processo di installazione di luarocks chiama il compilatore gcc (o qualunque compilatore C tu stia usando), quindi l'aggiunta di nuove librerie richiede un po' di tempo.

Il codice Lua è piuttosto semplice. I caratteri — marcano i commenti.  La funzione https.request fornisce molteplici valori di ritorno (un po' come in Python e Go). La concatenazione delle stringhe viene fatta con l'operatore  .. (invece di + in Python).

Il corpo della risposta da questa chiamata viene gestito con il modulo “ltn12” – vedi qui. Ciò consente una gestione efficiente dei dati che potrebbero essere restituiti in più “blocchi”. Come spiega quell'articolo:

La fabbrica delle tabelle crea un sink che memorizza tutti i dati ottenuti in una tabella. I dati possono successivamente essere concatenati efficacemente in una singola stringa con la funzione di libreria table.concat.

Il nostro esempio concatena semplicemente la tabella t e la stampa; potresti usare un filtro per eseguire ulteriori elaborazioni.

Perl

Sebbene Perl sia famoso per i suoi one liners, questo non è uno di essi.  Perl è stato progettato per una ricerca e modifica documenti molto veloce, ma è in realtà capace di molto di più.  Una volta ho scritto un intero suite di controllo dell'inventario in Perl.  Vai a capire.   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 vuoi vedere l'output. Come con tutti gli altri script in questa pagina, dovresti preimpostare una variabile d'ambiente SPARKPOST_API_KEY alla tua chiave API generata che include la funzione di convalida del destinatario. Questo script codifica in modo rigido $recipient = ‘test@gmail.com’ ma puoi facilmente aggiungere input da riga di comando o consumarlo da un file.

Dopo che tutte le variabili sono popolate, carichiamo un HTTP:Request con i 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

Visual Basic non è visuale e non è basilare (secondo me), ma è al numero 6 nell'indice TIOBE dei linguaggi, quindi eccoci qui.

Ci sono altri modi per fare questo, ma il percorso più semplice per il successo è utilizzare l'SDK di Visual Studio su una piattaforma Windows. Avvia Visual Studio, avvia un nuovo progetto e seleziona Visual Basic, quindi seleziona console.app. Assicurati di usare la versione VB, non la versione C# – è facile perdere di vista questo nell'SDK.

Visual Studio interface for creating a new project, highlighting options such as Console App (.NET Core) and ASP.NET Web Application, with sections for selecting the language, platform, and project type.


A questo punto puoi modificare le righe manualmente 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 di Windows. Il modo più semplice per farlo è aprire un prompt dei comandi e usare 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 repository, vedrai il risultato della validazione. Per gli sviluppatori che costruiscono consumatori di webhook di produzione che necessitano di convalidare indirizzi email su larga scala, la nostra guida al consumer webhook su Azure Functions mostra come creare soluzioni serverless che possono gestire flussi di lavoro di validazione in modo efficiente.

Rust

Rust è un linguaggio per la programmazione di sistemi e servizi web focalizzato su 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 repo Github utilizza la libreria reqwest con tokio asincrono, simile a questo esempio dal Rust cookbook. (Non è un errore di ortografia, il nome della libreria reqwest è scritto così). Abbiamo incluso un file di configurazione del gestore dei pacchetti cargo file di configurazione, quindi puoi compilare e eseguire con:

cd rust_recipient_validation cargo run

Questo compilerà il pacchetto in codice eseguibile e lo eseguirà:

Dev terminato [non ottimizzato + debuginfo] target(s) in 0.10s Esecuzione `target/debug/rust_recipient_validation` Stato: 200 OK Corpo: : (etc)

Il codice utilizza std:env per leggere la variabile di 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 emessa una chiamata asincrona, seguita da un .await? (vedi qui). Async, piuttosto che la più semplice chiamata bloccante, sembra essere necessaria per impostare le intestazioni delle richieste. Il testo del corpo della risposta viene letto con un secondo .await?, come in questo esempio.

Riepilogo

In questo articolo, abbiamo esaminato esempi di codice di convalida del destinatario in molte lingue. Ecco la nostra richiesta per te.

Facci sapere se pensi che ci sia sfuggita 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!

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.

Connettiamoci con un esperto di Bird.
Scopri tutta la potenza del Bird in 30 minuti.

Inviando, accetti che Bird possa contattarti riguardo ai nostri prodotti e servizi.

Puoi annullare l'iscrizione in qualsiasi momento. Consulta la Informativa sulla Privacy di Bird per i dettagli sul trattamento dei dati.

R

Raggiungi

G

Grow

M

Manage

A

Automate

Azienda

Newsletter

Rimani aggiornato con Bird attraverso aggiornamenti settimanali nella tua inbox.