Bereik

Grow

Manage

Automate

Bereik

Grow

Manage

Automate

Ontvanger Validatie: E-mail Verificatiecode Voorbeelden

E-mail

1 min read

Ontvanger Validatie: E-mail Verificatiecode Voorbeelden

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 klanten die geen e-mails versturen. Het maakt gebruik van krachtige data-gestuurde analyse op miljarden bounce-, afleverings- en betrokkenheidsgebeurtenissen dagelijks om ons algoritme te trainen, wat u een van de krachtigste data-gestuurde e-mailvalidatietools op de markt biedt, zodat u slimmer e-mails kunt verzenden.

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

API-aanvragen

In de SparkPost webapp kunt u een gehele lijst slepen en neerzetten voor validatie. U kunt ook de API gebruiken om enkele adressen te valideren, zodat u validatie direct in uw adresinvoerproces kunt integreren.

Een tijdje geleden hebben we een Python command-line tool gemaakt met behulp van deze API. We bespraken wat we voor andere talen moesten doen - en hier zijn we dan! Laten we beginnen.

Deze Github repository map bevat werkende voorbeelden van Aanhefvalidatie API-aanroepen in ongeveer een dozijn verschillende talen. We proberen de populairste toepasbare talen te dekken.

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

  • Haal uw sleutel op uit de omgevingsvariabele SPARKPOST_API_KEY

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

  • Ontvang een antwoordstring terug, die JSON-geformateerde gegevens met het resultaat bevat

  • Print het resultaat uit

SparkPost heeft bibliotheken voor sommige, maar niet alle talen die hier worden behandeld. We kozen ervoor om deze voorbeelden 'native' te schrijven, zodat we a) meer talen konden dekken, b) konden laten zien hoe eenvoudig de onderliggende code kan zijn, en c) u duidelijk de overeenkomsten en verschillen tussen talen kon 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 maken. 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 werkend GET-verzoek in en gebruik de "Code"-knop.

Python

Dit maakt gebruik van de populaire requests module, die hoog niveau is en daarom gemakkelijk te gebruiken. Dit voorbeeld controleert de geretourneerde statuscode, converteert de resulterende JSON terug naar 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 ook code genereren daarvoor; 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 afgeschreven en wordt niet langer actief onderhouden.  Ik koos voor het nieuwere axios pakket (met gebruik van 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 jouw API-sleutel, raden we sterk aan om onze API vanaf jouw server-side aan te roepen, nooit vanaf de clientzijde (browser / mobiel apparaat).

Ga

Go streeft naar een filosofie van “een goede manier” om iets te doen; in dit geval door gebruik te maken van de ingebouwde “batteries included” bibliotheken net/http, encoding/json en anderen.

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

We declareren ook de structuur van het resultatenobject met veldlabels om ons in staat te stellen de geretourneerde JSON-string te “unmarshal”. We leggen de “results” en “errors” labels over elkaar om beide soorten retouren toe te staan.

Ik houd van de snelheid, type-veiligheid en duidelijkheid van Go, zelfs als de code langer is dan onze vorige voorbeelden.

C#

Ik ben minder bekend met C# – voor mij lijkt het meer op Java dan op C. Ik kon dit samenstellen door voorbeelden te volgen die worden getoond in de request-bibliotheek System.Net.Http.

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

Ruby

Dit was mijn eerste poging tot 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 liep tegen een taal-/bibliotheekeigenaardigheid aan die het uitleggen waard is. Alleen het instellen van een URI die begint met "https://" is niet genoeg, je moet specifiek instellen http.use_ssl = true

Zonder dit zal je code proberen een verzoek op poort 443 te doen - maar zonder gebruik van SSL/TLS (d.w.z. in plain), en SparkPost zal terecht weigeren de aanvraag te autoriseren. Probeer dit niet thuis, omdat je API-sleutel in de Authorization-header staat. Deze taal-/bibliotheekeigenschap voelde onveilig voor mij aan.

Java

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

Toevallig werkte het gebruik van VS Code als mijn editor/debugger echt goed voor alle talen hier, met onder andere syntaxiskleuring, debuggerstappen/ variabelen bekijken. De InputStreamReader en BufferedReader constructies zijn vergelijkbaar met (en ik neem aan dat ze zijn gekopieerd door) Go.

C / C++

Dit was een reis langs herinneringen, aangezien ik in de jaren negentig veel C-code schreef, waarvan sommige nog steeds ergens diep in telecomnetwerken draaien. Aangezien de geschiedenis van C voorafgaat aan het moderne web, is het niet verrassend dat bibliotheekondersteuning een handmatige taak is. We moeten een recente versie van Libcurl downloaden (en compileren), gekoppeld 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 vergeten was, ondanks de littekens van eerdere gevechten, is de beangstigendheid van geheugentoewijzing! Om het voorbeeld eenvoudig te houden, heb ik de URL-stringlengte vooraf toegewezen als 1024 tekens en de lengte van het e-mailadres gecontroleerd (met strlen) voordat we erin samenvoegen (met strcat).

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

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

Lua

Lua staat bekend om zijn gemakkelijke coëxistentie naast een lichaam van C-code, en hier bij SparkPost hebben we Lua uitgebreid gebruikt voor beleidsaanpassingen binnen onze Momentum on-premises MTA. Je kunt het ook gebruiken als een op zichzelf staande scripttaal, en het is daar ook best goed in.

Met Lua 5.3 en de luarocks pakketbeheerder gebruiken we bibliotheken luasocket en luasec. Aantrekkelijk aan zijn C-integratie-erfgoed, koppelen we 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 karakters — markeren opmerkingen.  De functie https.request levert meerdere retourwaarden (een beetje zoals Python en Go). String concatenatie wordt gedaan met de operator  .. (in plaats van + in Python).

Het responslichaam 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 gegevens in een tabel opslaat. De gegevens kunnen later efficiënt worden samengevoegd tot een enkele string met de table.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 documentzoekopdrachten en -aanpassingen, maar is eigenlijk tot veel meer in staat.  Ik heb ooit een volledige voorraadsuites schreef in Perl.  Ga er maar aan staan.   H o e d a n o o k…

Dit script maakt gebruik van LWP::UserAgent en HTTP::Request en optioneel de JSON en Data::Dumper-pakketten, afhankelijk van hoe je de uitvoer wilt bekijken. Net als bij alle andere scripts op deze pagina, moet je een omgevingsvariabele SPARKPOST_API_KEY vooraf instellen op je gegenereerde API-sleutel die de functie voor ontvanger-validatie bevat. Dit script bevat hardcoded $recipient = ‘test@gmail.com’, maar je kunt eenvoudig invoer via de opdrachtregel toevoegen of uit een bestand lezen.

Nadat alle variabelen zijn gevuld, 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 array.  Je kunt JSON en DUMPER gebruiken om het resultaat weer te geven of eenvoudig de array doorgeven voor verdere verwerking.

VB.net

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

Er zijn andere manieren om dit te doen, maar de gemakkelijkste weg naar succes is om de Visual Studio SDK te gebruiken op een Windows-platform. Start Visual Studio op, begin een nieuw project en selecteer Visual Basic, kies dan console.app.  Zorg ervoor dat je de VB-versie gebruikt en niet de C#-versie – het is makkelijk om dat te missen in de SDK.




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 gemakkelijkste manier om dit te doen is door een opdrachtprompt te openen en setx.exe als volgt te gebruiken: 

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 ervan met een “set” zal niet werken, maar het zal beschikbaar zijn voor de code. Als je de code in de repo bouwt en uitvoert, zie je het validatieresultaat.

Rust

Rust is een programmeertaal voor systemen en webservices die is gericht 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-repo maakt gebruik van de reqwest bibliotheek met tokio async, vergelijkbaar met dit voorbeeld uit het Rust kookboek. (Dat is geen typefout, de reqwest bibliotheeknaam wordt zo gespeld). We hebben een cargo pakketbeheerder configuratiebestand toegevoegd, zodat je kunt bouwen en uitvoeren met:

cd rust_recipient_validation cargo run

Dit zal het pakket compileren tot uitvoerbare code en het uitvoeren:

Voltooid dev [ongeoptimaliseerd + debuginfo] doel(en) in 0.10s Uitvoeren `target/debug/rust_recipient_validation` Status: 200 OK Body: : (etc)

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 goed gaat, wordt er een nieuwe reqwest::Client gemaakt en wordt een async-aanroep gedaan, gevolgd door een .await? (zie hier). Async, in plaats van de eenvoudigere blokkerende aanroep, lijkt nodig te zijn om aanvraagheaders in te stellen. Reactie body-tekst wordt gelezen met een tweede .await?, zoals per dit voorbeeld.

Samenvatting

In dit artikel hebben we door de codevoorbeelden voor Ontvanger Validatie in veel talen gelopen. Hier is ons verzoek aan jou.

Laat ons weten of je denkt dat we jouw favoriete taal hebben gemist. We hebben misschien niet zoveel voorbeelden als The Fibonacci Project, maar we zouden er graag meer aan toevoegen. Ook, als je denkt dat onze voorbeelden kunnen worden verbeterd, laat het ons weten!

Meld je aan voor onze nieuwsbrief.

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

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.

Meld je aan voor onze nieuwsbrief.

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

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.

Meld je aan voor onze nieuwsbrief.

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

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.

Pinterest-logo
Uber-logo
Square logo
Adobe-logo
Meta-logo
PayPal-logo

Bedrijf

Nieuwsbrief

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

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.

Uber-logo
Square logo
Adobe-logo
Meta-logo

Bedrijf

Nieuwsbrief

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

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.

Uber-logo
Adobe-logo
Meta-logo

Bereik

Grow

Manage

Automate

Bronnen

Bedrijf

Nieuwsbrief

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

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.