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

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.

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.

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.

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.

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_KEY

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

  • Ricevi 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.

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_KEY

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

  • Ricevi 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.

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_KEY

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

  • Ricevi 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.

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.

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”.

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.

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”.

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.

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”.

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

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.

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).

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).

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.

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.

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.

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.

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

È 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 ..

È 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.

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.

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.

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.

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

Visual Basic non è visivo e non è basilare (IMHO), ma è al #6 nell'indice dei linguaggi TIOBE, quindi andiamo.

Ci sono altri modi per farlo, ma il percorso più facile per il successo è utilizzare il SDK di Visual Studio 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 non accorgersene 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, è necessario aggiungere una variabile ambiente 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 si applica all'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 compili ed esegui il codice incluso nel repo, vedrai il risultato della validazione. Per gli sviluppatori che costruiscono consumatori di webhook di produzione che devono convalidare indirizzi email su scala, la nostra guida al consumatore webhook di Azure Functions mostra come costruire soluzioni serverless che possono gestire flussi di lavoro di convalida in modo efficiente.

Visual Basic non è visivo e non è basilare (IMHO), ma è al #6 nell'indice dei linguaggi TIOBE, quindi andiamo.

Ci sono altri modi per farlo, ma il percorso più facile per il successo è utilizzare il SDK di Visual Studio 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 non accorgersene 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, è necessario aggiungere una variabile ambiente 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 si applica all'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 compili ed esegui il codice incluso nel repo, vedrai il risultato della validazione. Per gli sviluppatori che costruiscono consumatori di webhook di produzione che devono convalidare indirizzi email su scala, la nostra guida al consumatore webhook di Azure Functions mostra come costruire soluzioni serverless che possono gestire flussi di lavoro di convalida in modo efficiente.

Visual Basic non è visivo e non è basilare (IMHO), ma è al #6 nell'indice dei linguaggi TIOBE, quindi andiamo.

Ci sono altri modi per farlo, ma il percorso più facile per il successo è utilizzare il SDK di Visual Studio 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 non accorgersene 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, è necessario aggiungere una variabile ambiente 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 si applica all'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 compili ed esegui il codice incluso nel repo, vedrai il risultato della validazione. Per gli sviluppatori che costruiscono consumatori di webhook di produzione che devono convalidare indirizzi email su scala, la nostra guida al consumatore webhook di Azure Functions mostra come costruire soluzioni serverless che possono gestire flussi di lavoro di convalida in modo efficiente.

Ruggine

Rust è un linguaggio per la programmazione di sistemi e servizi web che si concentra su prestazioni, sicurezza e concorrenza. Come dice Wikipedia, Rust è stato il “linguaggio di programmazione più amato” nell'indagine sugli sviluppatori di Stack Overflow dal 2016.

Il codice Rust nel nostro repo Github utilizza la libreria reqwest con tokio async, simile all'esempio nel Rust Cookbook. (Non è un errore di battitura, il nome della libreria reqwest si scrive in questo modo). Abbiamo incluso un file di configurazione per il gestore dei pacchetti cargo così puoi costruire ed eseguire con:

cd rust_recipient_validation cargo run

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

Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/rust_recipient_validation`
Status: 200 OK
Body: : (etc)

Il codice utilizza std:env per leggere la variabile ambiente SPARKPOST_API_KEY. Una clausola match gestisce il caso in cui la chiave non sia definita. Se tutto va bene, viene creato un nuovo reqwest::Client e viene emessa una chiamata async, seguita da un .await? (vedi la documentazione di reqwest). Async, piuttosto che la chiamata bloccante più semplice, sembra essere necessario per impostare le intestazioni della richiesta. Il testo del corpo della risposta viene letto con un secondo .await?, come da questo esempio.

Rust è un linguaggio per la programmazione di sistemi e servizi web che si concentra su prestazioni, sicurezza e concorrenza. Come dice Wikipedia, Rust è stato il “linguaggio di programmazione più amato” nell'indagine sugli sviluppatori di Stack Overflow dal 2016.

Il codice Rust nel nostro repo Github utilizza la libreria reqwest con tokio async, simile all'esempio nel Rust Cookbook. (Non è un errore di battitura, il nome della libreria reqwest si scrive in questo modo). Abbiamo incluso un file di configurazione per il gestore dei pacchetti cargo così puoi costruire ed eseguire con:

cd rust_recipient_validation cargo run

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

Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/rust_recipient_validation`
Status: 200 OK
Body: : (etc)

Il codice utilizza std:env per leggere la variabile ambiente SPARKPOST_API_KEY. Una clausola match gestisce il caso in cui la chiave non sia definita. Se tutto va bene, viene creato un nuovo reqwest::Client e viene emessa una chiamata async, seguita da un .await? (vedi la documentazione di reqwest). Async, piuttosto che la chiamata bloccante più semplice, sembra essere necessario per impostare le intestazioni della richiesta. Il testo del corpo della risposta viene letto con un secondo .await?, come da questo esempio.

Rust è un linguaggio per la programmazione di sistemi e servizi web che si concentra su prestazioni, sicurezza e concorrenza. Come dice Wikipedia, Rust è stato il “linguaggio di programmazione più amato” nell'indagine sugli sviluppatori di Stack Overflow dal 2016.

Il codice Rust nel nostro repo Github utilizza la libreria reqwest con tokio async, simile all'esempio nel Rust Cookbook. (Non è un errore di battitura, il nome della libreria reqwest si scrive in questo modo). Abbiamo incluso un file di configurazione per il gestore dei pacchetti cargo così puoi costruire ed eseguire con:

cd rust_recipient_validation cargo run

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

Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/rust_recipient_validation`
Status: 200 OK
Body: : (etc)

Il codice utilizza std:env per leggere la variabile ambiente SPARKPOST_API_KEY. Una clausola match gestisce il caso in cui la chiave non sia definita. Se tutto va bene, viene creato un nuovo reqwest::Client e viene emessa una chiamata async, seguita da un .await? (vedi la documentazione di reqwest). Async, piuttosto che la chiamata bloccante più semplice, sembra essere necessario per impostare le intestazioni della richiesta. Il testo del corpo della risposta viene letto con un secondo .await?, come da questo esempio.

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!

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!

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!

Altre notizie

Leggi di più da questa categoria

A person is standing at a desk while typing on a laptop.

La piattaforma completa nativa dell'IA che si espande con la tua azienda.

© 2025 Uccello

A person is standing at a desk while typing on a laptop.

La piattaforma completa nativa dell'IA che si espande con la tua azienda.

© 2025 Uccello