Bereik

Grow

Manage

Automate

Bereik

Grow

Manage

Automate

Ontvanger Validatie: E-mail Verificatiecode Voorbeelden

Bird

8 jul 2020

E-mail

1 min read

Ontvanger Validatie: E-mail Verificatiecode Voorbeelden

Bird

8 jul 2020

E-mail

1 min read

Ontvanger Validatie: E-mail Verificatiecode Voorbeelden

SparkPost Ontvanger Validatie is nu beschikbaar voor zowel bestaande SparkPost-klanten als voor nieuwe, niet-zendende klanten. Het maakt gebruik van krachtige, op data gebaseerde analyses op miljarden afkezingen, afleveringen en betrokkenheid gebeurtenissen dagelijks om ons algoritme te trainen, waardoor u een van de meest krachtige, op data gebaseerde e-mailvalidatiehulpmiddelen op de markt krijgt, zodat u slimmer e-mails kunt verzenden.

SparkPost Recipient Validation is nu beschikbaar voor zowel bestaande SparkPost-klanten als voor nieuwe, niet-verzendende klanten. Het maakt gebruik van krachtige data-gedreven analyse van miljarden bounce-, leverings- en betrokkenheidsevenementen per dag om ons algoritme te trainen en u een van de krachtigste data-gedreven e-mailvalidatietools op de markt te bieden, zodat u slimmer e-mails kunt verzenden. Dit vertegenwoordigt de nieuwste evolutie in email validation techniques, die verder gaan dan eenvoudige syntaxiscontroles naar geavanceerde data-gedreven benaderingen die nauwkeurigere resultaten bieden.

Dit artikel legt uit hoe u het meeste kunt halen uit de gegevens die u ontvangt voor elke gevalideerde ontvanger - u zult zien dat we adressen classificeren als "geldig", "riskant", "neutraal", "niet af te leveren" en "typefout". We geven u een "reden"-code en ook een "did_you_mean" voor bekende adresfouten.

API-aanvragen

In de SparkPost-webapplicatie kun je een hele lijst slepen en neerzetten voor validatie. Je kunt ook de API gebruiken om afzonderlijke adressen te valideren, zodat je validatie direct in je adresinvoerworkflow kunt integreren.

Onlangs bedachten we een Python-opdrachtregeltool met behulp van deze API. We bespraken wat we moesten doen voor andere talen - en hier zijn we dan! Laten we beginnen.

Deze Github-repositorymap bevat werkende voorbeelden van Recipient Validation API-aanroepen in ongeveer een dozijn verschillende talen. We proberen de meest populaire toepasselijke talen te dekken.

De gebruikelijke manier om al deze voorbeelden door te werken is:

  • Neem je sleutel uit de omgevingsvariabele SPARKPOST_API_KEY

  • Voer een API-aanroep uit naar /api/v1/recipient-validation/single/ om een ontvanger te valideren

  • Ontvang een response-string terug, met daarin JSON-geformatteerde gegevens met het resultaat

  • Druk het resultaat af

SparkPost heeft bibliotheken voor sommige, maar niet alle talen die hier worden behandeld. We kozen ervoor om deze voorbeelden in plaats daarvan "native" te schrijven, zodat we a) meer talen konden dekken, b) konden laten zien hoe eenvoudig de onderliggende code kan zijn, en c) jou in staat stellen duidelijk de overeenkomsten en verschillen tussen talen te zien.

Bash / Curl

Dit wint de prijs voor de kortste code – het gebruikt eenvoudigweg het opdrachtregelprogramma "curl" om het verzoek te doen en de reactie rechtstreeks naar de terminal af te drukken. Je kunt zien dat de uitvoer een string is, die JSON bevat; we parseren eigenlijk niet de afzonderlijke resultaatsattributen.

Dit wint de prijs voor de kortste code – het gebruikt eenvoudigweg het opdrachtregelprogramma "curl" om het verzoek te doen en de reactie rechtstreeks naar de terminal af te drukken. Je kunt zien dat de uitvoer een string is, die JSON bevat; we parseren eigenlijk niet de afzonderlijke resultaatsattributen.

Dit wint de prijs voor de kortste code – het gebruikt eenvoudigweg het opdrachtregelprogramma "curl" om het verzoek te doen en de reactie rechtstreeks naar de terminal af te drukken. Je kunt zien dat de uitvoer een string is, die JSON bevat; we parseren eigenlijk niet de afzonderlijke resultaatsattributen.

PHP

Betrouwbare PHP heeft een paar verschillende manieren om HTTPS API-aanroepen te doen. Hier hebben we ervoor gekozen om curl_setopt en curl_exec te gebruiken. (https://www.php.net/manual/en/function.curl-exec.php)

Als je de voorkeur geeft aan HTTP_Request2 of pecl_http, dan heeft Postman een ingebouwde codegenerator die je kunt gebruiken om vergelijkbare voorbeelden te maken – stel gewoon een werkende GET-aanroep in en gebruik de "Code"-knop.

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

Dit gebruikt de populaire requests module, die hoogwaardig is en daarom gemakkelijk te gebruiken. Dit voorbeeld controleert de geretourneerde statuscode, zet de resultaten JSON terug om in een Python dictionary-object, en print het resulterende object in plaats van alleen een string.

Als je de ingebouwde http.client bibliotheek verkiest, kan Postman daar ook code voor genereren; het is niet veel langer.

Node.js

Er zijn veel verschillende node.js HTTP(S) bibliotheken. Ik begon met het oudere request pakket (met een callbackfunctie) maar het is verouderd en wordt niet langer actief onderhouden.  Ik koos voor het nieuwere axios pakket (met promises). 

Postman kan je ook een Javascript native voorbeeld geven en Unirest, voor het geval je die verkiest.

Omdat deze code toegang nodig heeft tot je API-sleutel, raden we sterk aan om onze API vanaf je serverzijde aan te roepen, nooit vanaf de client (browser / mobiele apparaat) zijde.

Ga

Go streeft naar een filosofie van “één goede manier” om iets te doen; in dit geval met behulp van de ingebouwde “inclusieve batterijen” bibliotheken net/http, encoding/json en andere.

De lengte is vooral te danken aan de expliciete foutcontrole clausules if err != nil {} overal (geen uitzonderingen LOL).

We declareren ook de structuur van het resultatenobject met veldtags, om ons in staat te stellen de JSON geretourneerde string te “unmarshallen”. We overlappen de “results” en “errors” tags om beide soorten retouren mogelijk te maken.

I like de snelheid, type-veiligheid en duidelijkheid van Go, zelfs als de code langer is dan onze eerdere voorbeelden.

C#

Ik ben minder bekend met C# – voor mij lijkt het vrij Java-achtig, in plaats van C-achtig. Ik kon dit samenstellen door de voorbeelden te volgen die in de request-bibliotheek System.Net.Http werden getoond.

Postman kan automatisch voorbeeldcode genereren met RestSharp, als je dat liever hebt.

Ruby

Dit was mijn eerste poging met Ruby-code; ik gebruikte de Net::http bibliotheek en volgde dit voorbeeld (wat blijkt heel dicht bij de code te zijn die Postman automatisch genereert).

Ik kwam een taal/bibliotheek eigenaardigheid tegen die uitleg waard is. Alleen het gebruik van een URI die begint met "https://" is niet genoeg, je moet specifiek instellen http.use_ssl = true

Zonder dit zal je code een verzoek proberen op poort 443 - maar zonder gebruik van SSL/TLS (dus in plaintext), en SparkPost zal terecht weigeren het verzoek te autoriseren. Probeer dit niet thuis, omdat je API-sleutel in de Authorization-header staat. Deze taal/bibliotheek functie voelde onveilig voor mij.

Java

Ik heb nog nooit serieus in Java geschreven, maar het was eenvoudig om dit samen te stellen door de algemene aanpak te volgen die wordt gebruikt in de SparkPost-bibliotheek voor andere GET-aanroepen.

Toevallig werkte het gebruik van VS Code als mijn editor / debugger echt goed voor alle talen hier, waarbij ik syntaxismarkering, debuggerstappen / variabelenweergave enz. kreeg. The InputStreamReader en BufferedReader constructies zijn vergelijkbaar met (en ik neem aan dat ze zijn gekopieerd door) Go.

C / C++

Dit was een trip down memory lane, omdat ik in de jaren 1990 veel C-code schreef, waarvan sommige nog steeds diep in telecommunicatienetwerken ergens draaien. Aangezien de geschiedenis van C voorafgaat aan het moderne web, is het niet verrassend dat ondersteuning van bibliotheken een handmatige taak is. We moeten een recente versie van Libcurl downloaden (en compileren), gelinkt aan een OpenSSL-bibliotheek - zie de README voor de daadwerkelijke stappen.

Dit voelt als veel werk vergeleken met moderne talen, vooral wanneer Go (of Lua, of Python, of een van de anderen) snel genoeg zijn voor dit soort taken.

Het andere dat ik was vergeten, ondanks de littekens van eerdere gevechten, is de angstaanjagendheid van geheugenallocatie! Om het voorbeeld eenvoudig te houden, prealloceerde ik de URL-tekenreeks tot 1024 karakters, en controleerde ik de lengte van het e-mailadres (met behulp van strlen) voordat we eraan toevoegen (met behulp van strcat).

We behandelen de Authorisatiestring met een samengevoegde API-sleutel op dezelfde manier .. ook al weten we dat een geldige API-sleutel nooit te lang zal zijn .. dat biedt geen bescherming! Invoer van de gebruiker afkomstig van een omgevingsvariabele kan van alles zijn. Je moet defensief programmeren.

Een meer geavanceerde ontwikkelaar zou malloc kunnen gebruiken in plaats van stack variabele toewijzing en precies berekenen hoe lang de samengevoegde strings moeten zijn. Het moeten nadenken over deze extra complexiteit gaf me een pijn in de diodes aan mijn linkerzijde; het herinnerde me aan de risico's die C-programmeurs elke dag lopen, in een poging bufferoverschrijdingen en onverwachte neveneffecten te vermijden. Wat ons brengt bij ..

Lua

Lua staat bekend om zijn gemakkelijke samenwerking naast een C-code, en hier bij SparkPost gebruiken we Lua uitgebreid voor Policy-aanpassingen binnen onze Momentum on-premises MTA. Je kunt het ook gebruiken als een zelfstandige scripttaal, en het is daar ook best leuk voor.

Met Lua 5.3 en de luarocks pakketbeheerder, gebruiken we de bibliotheken luasocket en luasec. Blijk gevend van zijn C-integratie-erfenis, koppelen we het aan onze lokale OpenSSL-bibliotheek. Het luarocks-installatieproces roept de gcc compiler aan (of welke C compiler je ook gebruikt), dus het toevoegen van nieuwe bibliotheken duurt even.

De Lua-code is vrij eenvoudig. De tekens — markeren opmerkingen.  De functie https.request biedt meerdere retourwaarden (een beetje zoals Python en Go). String-concatenatie wordt gedaan met de operator  .. (in plaats van + in Python).

De responsbody van deze oproep wordt afgehandeld met de "ltn12" module – zie hier. Dat maakt efficiënte verwerking mogelijk van gegevens die in meerdere "brokken" kunnen worden geretourneerd. Zoals dat artikel uitlegt:

De tabel fabriek creëert een sink die alle verkregen data in een tabel opslaat. De gegevens kunnen later efficiënt worden samengevoegd tot één enkele string met de tabel.concat bibliotheekfunctie.

Ons voorbeeld voegt gewoon tabel t samen en print het uit; je zou een filter kunnen gebruiken om meer verwerking uit te voeren.

Perl

Hoewel Perl beroemd is om zijn one liners, is dit er niet een van.  Perl is ontworpen voor zeer snelle documentzoekopdracht en wijziging, maar is eigenlijk tot veel meer in staat.  Ik heb ooit een volledige voorraadbeheersuite in Perl geschreven.  Ga daar maar eens aan staan.  Hoe dan ook…

Dit script maakt gebruik van LWP::UserAgent en HTTP::Request en eventueel de JSON- en Data::Dumper-pakketten, afhankelijk van hoe je het resultaat wilt zien. Zoals met alle andere scripts op deze pagina, moet u een omgevingsvariabele SPARKPOST_API_KEY vooraf instellen op uw gegenereerde API-sleutel die de functie Oprichtingsvalidatie bevat. Dit script hard codeert $recipient = ‘test@gmail.com’, maar je kunt eenvoudig invoer vanaf de opdrachtregel toevoegen of uit een bestand lezen.

Nadat alle variabelen zijn ingevuld, laden we een HTTP:Request met GET-parameters en sturen deze naar de LWP:UserAgent.  Het resulterende “bericht” is het resultaat van de e-mailvalidatietest als een array.  U kunt JSON en DUMPER gebruiken om het resultaat weer te geven of gewoon de array doorgeven voor verdere verwerking.

VB.net

Visual Basic is niet visueel en het is niet basic (naar mijn bescheiden mening), maar het is #6 op de TIOBE-taalindex, dus hier gaan we.

Er zijn andere manieren om dit te doen, maar de gemakkelijkste weg naar succes is het gebruik van de Visual Studio SDK op een Windows-platform. Start Visual Studio, begin een nieuw project en selecteer Visual Basic, kies dan voor console.app. Zorg ervoor dat je de VB-versie gebruikt en niet de C#-versie – het is gemakkelijk om dat te missen in de 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.


Op dit punt kun je regels handmatig bewerken of de code van hier kopiëren/plakken in VS en een hoop tijd besparen. Om deze code te laten werken, moet je een Windows-omgevingsvariabele toevoegen. De makkelijkste manier om dit te doen is door een opdrachtprompt te openen en setx.exe te gebruiken, zoals dit: 

C:\Users\me>setx SPARKPOST_API_KEY  "142<redacted<redacted>c531c3"

In Windows 10 wordt dit toegepast op je gebruikersomgeving, maar het is niet onmiddellijk beschikbaar in de huidige opdrachtensessie, dus het testen met een "set" zal niet werken, maar het zal beschikbaar zijn voor de code. Als je de code in de repo bouwt en uitvoert, zul je het validatieresultaat zien. Voor ontwikkelaars die productie-webhook-consumenten bouwen die e-mailadressen op schaal moeten valideren, laat onze Azure Functions webhook-consumptiegids zien hoe je serverloze oplossingen kunt bouwen die validatieworkflows efficiënt kunnen afhandelen.

Rust

Rust is een taal voor systeem- en webdienstprogrammering die gericht is op prestaties, veiligheid en gelijktijdigheid. Zoals Wikipedia zegt, is Rust sinds 2016 de "meest geliefde programmeertaal" in de Stack Overflow Developer Survey.

De Rust-code in onze Github-repository gebruikt de reqwest bibliotheek met tokio async, vergelijkbaar met dit voorbeeld uit het Rust-kookboek. (Dat is geen typefout, de reqwest bibliotheeknaam is zo gespeld). We hebben een cargo package manager configuratiebestand opgenomen, zodat je kunt bouwen en uitvoeren met:

cd rust_recipient_validation cargo run

Dit zal het pakket compileren naar uitvoerbare code, en het uitvoeren:

Voltooid dev [niet-geoptimaliseerd + debuginfo] doel(en) in 0,10s Uitvoeren `target/debug/rust_recipient_validation` Status: 200 OK Lichaam: : (enzovoort)

De code gebruikt std:env om de SPARKPOST_API_KEY omgevingsvariabele te lezen. Een match-clausule behandelt het geval waarin de sleutel niet is gedefinieerd. Als alles in orde is, wordt een nieuwe reqwest::Client gemaakt en een async-aanroep gedaan, gevolgd door een .await? (zie hier). Async, in plaats van de eenvoudigere blokkeeroproep, lijkt nodig te zijn om aanvraagheaders in te stellen. De tekst van het antwoordlichaam wordt gelezen met een tweede .await?, zoals in dit voorbeeld.

Samenvatting

In dit artikel hebben we voorbeelden van code voor Ontvanger Validatie in veel talen besproken. Hier is ons verzoek aan u.

Laat het ons weten als u denkt dat we uw favoriete taal hebben gemist. We hebben misschien niet zoveel voorbeelden als The Fibonacci Project, maar we zouden graag wat meer willen toevoegen. Ook, als u denkt dat onze voorbeelden verbeterd kunnen worden, laat het ons weten!

Laten we je in contact brengen met een Bird-expert.
Bekijk de volledige kracht van de Bird in 30 minuten.

Door te verzenden, ga je ermee akkoord dat Bird contact met je mag opnemen over onze producten en diensten.

U kunt zich op elk moment afmelden. Zie Bird's Privacyverklaring voor details over gegevensverwerking.

Nieuwsbrief

Blijf op de hoogte met Bird via wekelijkse updates in je inbox.

Laten we je in contact brengen met een Bird-expert.
Bekijk de volledige kracht van de Bird in 30 minuten.

Door te verzenden, ga je ermee akkoord dat Bird contact met je mag opnemen over onze producten en diensten.

U kunt zich op elk moment afmelden. Zie Bird's Privacyverklaring voor details over gegevensverwerking.

Nieuwsbrief

Blijf op de hoogte met Bird via wekelijkse updates in je inbox.

Laten we je in contact brengen met een Bird-expert.
Bekijk de volledige kracht van de Bird in 30 minuten.

Door te verzenden, ga je ermee akkoord dat Bird contact met je mag opnemen over onze producten en diensten.

U kunt zich op elk moment afmelden. Zie Bird's Privacyverklaring voor details over gegevensverwerking.

R

Bereik

G

Grow

M

Manage

A

Automate

Nieuwsbrief

Blijf op de hoogte met Bird via wekelijkse updates in je inbox.