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.

Autore

Uccello

Categoria

Email

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.

Autore

Uccello

Categoria

Email

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.

Autore

Uccello

Categoria

Email

SparkPost Validazione del destinatario è ora disponibile sia per i clienti esistenti di SparkPost che per i nuovi clienti non invii. Utilizza potenti analisi basate sui dati su miliardi di eventi di rimbalzo, consegna e coinvolgimento quotidiano per addestrare il nostro algoritmo, offrendoti uno dei più potenti strumenti di validazione delle email sul mercato, affinché tu possa inviare email in modo più intelligente.

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


Richieste API

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

Tempo fa abbiamo ideato un strumento da riga di comando Python utilizzando questa API. Abbiamo discusso su cosa dovremmo fare per altri linguaggi – ed eccomi qui! Iniziamo.

Questa cartella del repository Github ha esempi funzionanti di chiamate all'API di Validazione del Destinatario in circa una dozzina di linguaggi diversi. Cerchiamo di coprire i linguaggi applicabili più popolari.

Il modo comune di affrontare tutti questi esempi è:

  • Prendi la tua chiave dalla variabile di ambiente SPARKPOST_API_KEY

  • Fai una chiamata API a /api/v1/recipient-validation/single/ per convalidare un destinatario

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

  • Stampa il risultato

SparkPost ha librerie per alcuni, ma non per tutti i linguaggi trattati qui. Abbiamo scelto di scrivere questi esempi in “nativo” per poter a) coprire più linguaggi, b) dimostrare quanto possa essere semplice il codice sottostante e c) permetterti di vedere chiaramente le somiglianze 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 fare la richiesta e stampare la risposta direttamente nel terminale. Puoi vedere che l'output è una stringa, contenente JSON; in realtà non analizziamo gli attributi di risultato individuali.


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

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


Node.js

Ci sono molti diversi pacchetti HTTP(S) per 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 promises). 

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

Poiché questo codice ha bisogno di accesso alla tua chiave API, ti raccomandiamo vivamente di chiamare la nostra API dal lato server, mai dal lato client (browser/dispositivo mobile).


Go

Go si sforza di seguire una filosofia di “un buon modo” 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 (nessuna eccezione LOL).

Dichiaramo anche la struttura dell'oggetto risultati con tag di campo, per consentirci di “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.


C#

Non sono molto familiare con C# – per me sembra piuttosto simile a Java, piuttosto che a C. Sono riuscito a mettere insieme questo seguendo esempi mostrati nella libreria richieste System.Net.Http.

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


Ruby

Questa è stata la mia prima prova con il codice Ruby; ho utilizzato la libreria Net::http e seguito questo esempio (che si è rivelato molto simile al codice che Postman genera automaticamente).

Ho riscontrato una stranezza di linguaggio/libreria che vale la pena spiegare. Basta impostare una URI che inizia con “https://” non è sufficiente, devi specificamente impostare http.use_ssl = true

Senno, il tuo codice tenterà una richiesta sulla porta 443 – ma senza utilizzare SSL/TLS (cioè in chiaro), e SparkPost rifiuterà giustamente di autorizzare la richiesta. Non provare questo a casa, perché la tua chiave API è nell'intestazione di autorizzazione. Questa caratteristica del linguaggio/libreria sembrava per me poco sicura.


Java

Non ho mai scritto seriamente in Java prima, ma è stato facile mettere insieme questo seguendo l'approccio generale utilizzato nella libreria SparkPost per altre chiamate GET.

Per inciso, utilizzare VS Code come il mio editor/debugger ha funzionato davvero bene per tutti i linguaggi qui, fornendomi evidenziazione della sintassi, step del debugger / visualizzazione delle variabili ecc. The InputStreamReader e BufferedReader sono simili a (e suppongo siano stati copiati da) Go.


C / C++

È stato un viaggio nella memoria, poiché ho scritto molto codice C negli anni '90, parte ancora in esecuzione in qualche rete telecom. Poiché la storia del C precede il Web moderno, non sorprende che il supporto della libreria sia un compito manuale. Dobbiamo scaricare (e compilare) una versione recente di Libcurl, collegandola a una libreria OpenSSL – vedere il README per i passi effettivi.

Questo sembra richiedere molto lavoro rispetto ai linguaggi moderni, soprattutto quando Go (o Lua, o Python, o qualsiasi degli altri) 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 (utilizzando strlen) prima di concatenarvi (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 è alcuna 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 utilizzare malloc invece di un'allocazione di variabili sullo stack e calcolare solo quanto devono essere lunghe le stringhe unite. Pensare a questa complessità extra mi ha dato un dolore nei diodi sul lato sinistro; mi ha ricordato i rischi che i programmatori C affrontano ogni giorno, cercando di evitare buffer overflow e effetti collaterali inaspettati. E questo ci porta a ..


Lua

Lua è conosciuta per la sua facile coesistenza accanto a un corpus di codice C, e qui su SparkPost abbiamo utilizzato ampiamente Lua per personalizzazioni di Policy all'interno del nostro MTA Momentum on-premises. Puoi anche usarla come linguaggio di scripting autonomo, ed è piuttosto carina anche per quello.

Con Lua 5.3 e il gestore di pacchetti 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 gcc compilatore (o qualsiasi compilatore C tu stia usando), quindi l'aggiunta di nuove librerie richiede un po' di tempo.

Il codice Lua è abbastanza semplice. I caratteri — segnano 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 è gestito con il modulo “ltn12” – vedere qui. Ciò 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 essere successivamente 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 one liner, questo non è uno di essi.  Perl è stato progettato per una ricerca e modifica documentale molto rapida, ma in realtà è capace di molto di più.  Una volta ho scritto un intero suite di controllo dell'inventario in Perl.  Vai a capire.   A n y w a y…

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 su questa pagina, dovresti preimpostare una variabile di ambiente SPARKPOST_API_KEY con la tua chiave API generata che include la funzione di Validazione del Destinatario. Questo script imposta staticamente $recipient = ‘test@gmail.com’ ma puoi facilmente aggiungere input da riga di comando o consumare da un file.

Una volta che tutte le variabili sono popolate, carichiamo una richiesta HTTP:Request con parametri GET e la inviamo all'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 è visivo e non è basilare (IMHO), ma è al #6 nell'indice linguistico TIOBE, quindi andiamo.

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


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 di 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 validazione.


Rust

Rust è un linguaggio per la programmazione di sistemi e servizi web che è focalizzato su prestazioni, sicurezza e concorrenza. Come Wikipedia dice, Rust è stato il “linguaggio di programmazione più amato” nel Stack Overflow Developer Survey dal 2016.

Il codice Rust nel nostro repo Github utilizza la libreria reqwest con tokio async, simile a questo esempio dal manuale di cucina Rust. (Non è un errore di battitura, il nome della libreria reqwest è scritto in questo modo). Abbiamo incluso un file di configurazione del pacchetto cargo in modo che tu possa costruire ed eseguire con:

cd rust_recipient_validation cargo run

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

Finito dev [non ottimizzato + debuginfo] 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 di ambiente SPARKPOST_API_KEY. Una clausola di corrispondenza gestisce il caso in cui la chiave è indefinita. Se tutto va bene, viene creato un nuovo reqwest::Client e viene emessa una chiamata async, seguita da un .await? (vedi qui). Async, piuttosto che la chiamata bloccante più semplice, sembra essere necessario per impostare le intestazioni delle richieste. Il testo del corpo della risposta viene letto con un secondo .await?, come per questo esempio.


Riassunto

In questo articolo, abbiamo esaminato esempi di codice di Validazione del Destinatario in molti linguaggi. Ecco la nostra richiesta a te.

Faccelo sapere se pensi che ci sia mancato il tuo linguaggio preferito. Potremmo non avere tanti esempi quanto The Fibonacci Project, ma ci piacerebbe aggiungerne altri. Inoltre, se pensi che i nostri esempi possano essere migliorati, faccelo sapere!

Sign up

La piattaforma alimentata dall'IA per Marketing, Supporto e Finanza

Cliccando su "Richiedi una demo" accetti di Bird's

Sign up

La piattaforma alimentata dall'IA per Marketing, Supporto e Finanza

Cliccando su "Richiedi una demo" accetti di Bird's

Sign up

La piattaforma alimentata dall'IA per Marketing, Supporto e Finanza

Cliccando su "Richiedi una demo" accetti di Bird's

Channels

Cresci

Coinvolgi

Automatizzare

APIs

Risorse

Company

Socials

Grow

Manage

Automate

Grow

Manage

Automate