Zasięg

Grow

Manage

Automate

Zasięg

Grow

Manage

Automate

Walidacja odbiorcy: Przykłady kodów weryfikacyjnych e-mail

Email

1 min read

Walidacja odbiorcy: Przykłady kodów weryfikacyjnych e-mail

Email

1 min read

Walidacja odbiorcy: Przykłady kodów weryfikacyjnych e-mail

Walidacja odbiorców SparkPost jest teraz dostępna zarówno dla istniejących klientów SparkPost, jak i dla nowych, niewysyłających klientów. Wykorzystuje potężną analizę danych opartą na miliardach zdarzeń związanych z odrzuceniem, dostarczaniem i zaangażowaniem codziennie, aby szkolić nasz algorytm, oferując jeden z najpotężniejszych narzędzi do walidacji e-maili opartych na danych na rynku, dzięki czemu możesz wysyłać e-maile mądrzej.

SparkPost Recipient Validation jest teraz dostępny zarówno dla istniejących klientów SparkPost, jak i dla nowych klientów nie wysyłających. Wykorzystuje potężną analizę opartą na danych miliardów codziennych zdarzeń zwrotnych, dostarczalności i zaangażowania do trenowania naszego algorytmu, oferując jedno z najpotężniejszych narzędzi do weryfikacji emaili opartych na danych na rynku, dzięki czemu możesz wysyłać maile inteligentniej.

Ten artykuł wyjaśnia, jak najlepiej wykorzystać dane, które otrzymasz dla każdego zweryfikowanego odbiorcy – zobaczysz, że klasyfikujemy adresy jako „ważny”, „ryzykowny”, „neutralny”, „niedostarczalny” i „literówka”. Dajemy ci kod „reason” oraz „did_you_mean” dla znanych literówek w adresach.

API requests

W aplikacji internetowej SparkPost możesz przeciągnąć i upuścić całą listę do walidacji. Możesz także użyć API do walidacji pojedynczych adresów, aby zintegrować walidację bezpośrednio w swoim przepływie wprowadzania adresów.

Jakiś czas temu opracowaliśmy narzędzie wiersza poleceń w Pythonie korzystające z tego API. Omówiliśmy, co powinniśmy zrobić w przypadku innych języków – i oto jesteśmy! Zaczynajmy.

Ten folder repozytorium Github zawiera działające przykłady wywołań API walidacji odbiorców w około tuzinie różnych języków. Staramy się objąć najbardziej popularne odpowiednie języki.

Typowy sposób pracy z tymi przykładami to:

  • Pobierz swój klucz ze zmiennej środowiskowej SPARKPOST_API_KEY

  • Wykonaj wywołanie API na /api/v1/recipient-validation/single/ aby zweryfikować odbiorcę

  • Otrzymaj odpowiedź jako ciąg znaków, zawierający dane w formacie JSON z wynikiem

  • Wydrukuj wynik

SparkPost ma biblioteki dla niektórych, ale nie wszystkich języków omówionych tutaj. Zdecydowaliśmy się napisać te przykłady w sposób „natywny”, aby a) objąć więcej języków, b) pokazać, jak prosty może być kod źródłowy, oraz c) umożliwić Ci wyraźne dostrzeżenie podobieństw i różnic między językami.

Bash / Curl

To wygrywa nagrodę za najkrótszy kod – po prostu używa narzędzia wiersza poleceń „curl” do złożenia żądania i wydrukowania odpowiedzi bezpośrednio w terminalu. Można zobaczyć, że dane wyjściowe to ciąg zawierający JSON; tak naprawdę nie analizujemy poszczególnych atrybutów wyników.

To wygrywa nagrodę za najkrótszy kod – po prostu używa narzędzia wiersza poleceń „curl” do złożenia żądania i wydrukowania odpowiedzi bezpośrednio w terminalu. Można zobaczyć, że dane wyjściowe to ciąg zawierający JSON; tak naprawdę nie analizujemy poszczególnych atrybutów wyników.

To wygrywa nagrodę za najkrótszy kod – po prostu używa narzędzia wiersza poleceń „curl” do złożenia żądania i wydrukowania odpowiedzi bezpośrednio w terminalu. Można zobaczyć, że dane wyjściowe to ciąg zawierający JSON; tak naprawdę nie analizujemy poszczególnych atrybutów wyników.

PHP

Zaufany PHP ma kilka różnych sposobów na wykonywanie połączeń HTTPS API. Tutaj zdecydowaliśmy się użyć curl_setopt i curl_exec. (https://www.php.net/manual/en/function.curl-exec.php)

Jeśli wolisz HTTP_Request2 lub pecl_http, to Postman ma wbudowany generator kodu, który możesz użyć do tworzenia podobnych przykładów – wystarczy ustawić działające żądanie GET i użyć przycisku „Code”.

Python

To używa popularnego modułu requests, który jest wysokopoziomowy i dlatego łatwy w użyciu. Ten przykład sprawdza zwrócony kod statusu, konwertuje wynikowy JSON z powrotem do obiektu typu dictionary w Pythonie i wypisuje wynikowy obiekt zamiast tylko ciągu znaków.

Jeśli wolisz wbudowaną bibliotekę http.client, Postman także może wygenerować kod dla tego; nie jest to dużo dłuższe.

Node.js

Istnieje wiele różnych bibliotek HTTP(S) dla node.js. Zaczynałem od starszego pakietu request (korzystając z funkcji zwrotnej), ale jest on przestarzały i nie jest już aktywnie utrzymywany.  Wybrałem nowszy pakiet axios (korzystając z promises). 

Postman może również dostarczyć przykład natywny w JavaScript oraz Unirest, jeśli preferujesz te rozwiązania.

Ponieważ ten kod potrzebuje dostępu do Twojego klucza API, zdecydowanie zalecamy wywołanie naszego API z Twojego serwera, nigdy z klienta (przeglądarki / urządzenia mobilnego).

Idź

Go dąży do filozofii „jednej dobrej drogi” do zrobienia czegoś; w tym przypadku, używając wbudowanych bibliotek „baterie w zestawie” net/http, encoding/json i innych.

Długość wynika głównie z explicite klauzul sprawdzających błędy if err != nil {} wszędzie (bez wyjątków LOL).

Deklarujemy również strukturę obiektu wynikowego z tagami pól, aby umożliwić „odcyfrowanie” zwróconego ciągu JSON. Nakładamy tagi „results” i „errors”, aby umożliwić oba rodzaje zwrotu.

Lubię prędkość, bezpieczeństwo typów i przejrzystość Go, nawet jeśli kod jest dłuższy niż nasze wcześniejsze przykłady.

C#

Jestem mniej zaznajomiony z C# – dla mnie wygląda raczej jak Java, niż jak C. Udało mi się to złożyć, śledząc przykłady pokazane w bibliotece żądań System.Net.Http.

Postman może automatycznie generować przykładowy kod za pomocą RestSharp, jeśli to preferujesz.

Ruby

To była moja pierwsza próba kodu w Ruby; użyłem biblioteki Net::http i postępowałem zgodnie z tym przykładem (który okazuje się być bardzo zbliżony do kodu, który Postman generuje automatycznie).

Napotkałem na jedną osobliwość języka / biblioteki, którą warto wyjaśnić. Samo ustawienie użycia URI zaczynającego się od "https://" nie wystarczy, trzeba konkretnie ustawić http.use_ssl = true

Bez tego, Twój kod podejmie próbę połączenia na porcie 443 – ale bez użycia SSL/TLS (tj. w postaci niezaszyfrowanej), a SparkPost słusznie odmówi autoryzacji żądania. Nie próbuj tego w domu, ponieważ Twój klucz API znajduje się w nagłówku autoryzacji. Ta funkcjonalność języka / biblioteki wydawała mi się niebezpieczna.

Java

Nie napisałem wcześniej żadnego poważnego kodu w Java, ale łatwo było to poskładać, korzystając z ogólnego podejścia używanego w bibliotece SparkPost dla innych wywołań GET.

Przy okazji, używanie VS Code jako mojego edytora/debuggera działało naprawdę dobrze dla wszystkich języków tutaj, dając mi podświetlanie składni, krokowe debugowanie/wyświetlanie zmiennych itp. InputStreamReaderi BufferedReader konstrukty są podobne do (i zakładam, że zostały skopiowane przez) Go.

C / C++

To była podróż wzdłuż wspomnień, ponieważ napisałem dużo kodu w C w latach 90., niektóre wciąż działające głęboko w sieciach telekomunikacyjnych gdzieś. Ponieważ historia C poprzedza współczesny Web, nie jest zaskakujące, że wsparcie bibliotekowe jest zadaniem manualnym. Musimy pobrać (i skompilować) najnowszą wersję Libcurl, łącząc się z biblioteką OpenSSL – zobacz README dla rzeczywistych kroków.

To wydaje się dużo pracy w porównaniu do nowoczesnych języków, szczególnie gdy Go (lub Lua, lub Python, lub jakikolwiek z pozostałych) są wystarczająco szybkie dla takich zadań.

Inną rzeczą, o której zapomniałem, mimo że mam blizny z poprzednich bitew, jest przerażenie związane z alokacją pamięci! Aby utrzymać prostotę przykładu, prealokowałem długość ciągu URL jako 1024 znaki i sprawdziłem długość adresu email (używając strlen) zanim do niego dodamy (używając strcat).

Traktujemy ciąg autoryzacji z dołączonym kluczem API w ten sam sposób... nawet jeśli wiemy, że prawidłowy klucz API nigdy nie będzie zbyt długi... to nie jest ochrona! Dane wejściowe użytkownika pochodzące z zmiennej środowiskowej mogą być czymkolwiek. Musisz programować defensywnie.

Bardziej wyrafinowany programista mógłby użyć malloc zamiast alokacji zmiennej stosu i obliczyć, jak długie muszą być połączone ciągi. Myślenie o tej dodatkowej złożoności sprawiło, że poczułem ból w diodach po lewej stronie; przypomniało mi to o ryzyku, z jakim codziennie mierzą się programiści C, próbując unikać przepełnień bufora i nieoczekiwanych skutków ubocznych. Co prowadzi nas do ..

Lua

Lua jest znany z łatwej koegzystencji z kodem C, a tutaj w SparkPost używaliśmy Lua intensywnie do dostosowywania Polityki w naszym rozwiązaniu Momentum on-premises MTA. Można go również używać jako samodzielnego języka skryptowego i jest do tego całkiem fajny.

Z Lua 5.3 i menedżerem pakietów luarocks, używamy bibliotek luasocket i luasec. Pokazując swoje dziedzictwo integracji z C, łączymy się z naszą lokalną biblioteką OpenSSL. Proces instalacji luarocks wywołuje kompilator gcc (lub jakikolwiek inny kompilator C, którego używasz), więc dodanie nowych bibliotek zajmuje trochę czasu.

Kod Lua jest dość prosty. Znaki — oznaczają komentarze. Funkcja https.request zapewnia wiele wartości zwracanych (trochę jak w Pythonie i Go). Konkatenacja napisów jest realizowana za pomocą operatora .. (zamiast + w Pythonie).

Ciało odpowiedzi z tego wywołania jest obsługiwane z modułem „ltn12” – zobacz tutaj. To umożliwia efektywne przetwarzanie danych, które mogą być zwracane w wielu „chunkach”. Jak wyjaśnia ten artykuł:

Fabryka tabel tworzy zbiornik, który przechowuje wszystkie uzyskane dane w tabeli. Dane mogą być później efektywnie sklejane w pojedynczy string za pomocą funkcji biblioteki table.concat.

Nasz przykład po prostu konkatenuje tabelę t i drukuje ją; można by użyć filtra do dalszego przetwarzania.

Perl

Chociaż Perl jest znany ze swoich jednolinijkowców, to nie jest jednym z nich.  Perl został zaprojektowany do bardzo szybkiego przeszukiwania i modyfikacji dokumentów, ale w rzeczywistości potrafi znacznie więcej.  Kiedyś napisałem cały zestaw do kontroli zapasów w Perl.  Zobacz sam.   T a k c z y n i e j a k…

Ten skrypt korzysta z LWP::UserAgent i HTTP::Request oraz opcjonalnie z pakietów JSON i Data::Dumper, w zależności od tego, jak chcesz zobaczyć wynik. Jak w przypadku wszystkich innych skryptów na tej stronie, powinno się ustawić zmienną środowiskową SPARKPOST_API_KEY na wygenerowany klucz API, który zawiera funkcję Walidacji Odbiorców. Ten skrypt koduje na sztywno $recipient = ‘test@gmail.com’, ale można łatwo dodać wejście z wiersza poleceń lub pobrać z pliku.

Po wypełnieniu wszystkich zmiennych, ładujemy HTTP:Request z parametrami GET i wysyłamy do LWP:UserAgent.  Wynikowa „wiadomość” to wynik testu walidacji e-mail jako tablica.  Możesz użyć JSON i DUMPER, aby wyświetlić wynik lub po prostu przekazać tablicę do dalszego przetworzenia.

VB.net

Visual Basic is not visual and it is not basic (IMHO), but it is #6 on the TIOBE language index so here we go.

There are other ways to do this, but the easiest path to success is to use the Visual Studio SDK in a Windows platform. Fire up Visual Studio, start a new project and select Visual Basic, then select console.app.  Be sure to use the VB version not the C# version – it is easy to miss that in the SDK.




At this point you can edit lines manually or copy/paste the code from here into VS and save a bunch of time. In order to make this code work, you need to add a Windows environment variable.  The easiest way to do this is to open a command prompt and use setx.exe like this: 

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

In Windows 10, this is applied to your user environment, but is not immediately available in the current command session, so testing it with a “set” will not work, but it will be available to the code. If you build and execute the code included in the repo, you’ll see the validation result.

Rust

Rust to język do programowania systemowego i usług internetowych, który koncentruje się na wydajności, bezpieczeństwie i współbieżności. Tak jak mówi Wikipedia, Rust był „najbardziej lubianym językiem programowania” w ankiecie Stack Overflow Developer Survey od 2016 roku.

Kod Rust w naszym repozytorium Github używa biblioteki reqwest z tokio async, podobnie do tego przykładu z książki kucharskiej Rust. (To nie błąd, nazwa biblioteki reqwest jest pisana właśnie tak). Dołączyliśmy plik konfiguracyjny menedżera pakietów cargo, aby można było zbudować i uruchomić za pomocą:

cd rust_recipient_validation cargo run

To skompiluje pakiet do kodu wykonywalnego i uruchomi go:

Ukończono dev [nieoptymalizowany + debuginfo] cel(e) w 0.10s Uruchamianie `target/debug/rust_recipient_validation` Status: 200 OK Treść: : (itd.)

Kod używa std:envdo odczytu zmiennej środowiskowej SPARKPOST_API_KEY. Klauzula match obsługuje przypadek, gdy klucz jest niezdefiniowany. Jeśli wszystko jest w porządku, tworzony jest nowy reqwest::Client, a następnie wydawane jest asynchroniczne wywołanie, po którym następuje .await? (zobacz tutaj). Wydaje się, że w celu ustawienia nagłówków żądania potrzebny jest async zamiast prostszego wywołania blokującego. Treść odpowiedzi jest czytana za pomocą drugiego .await?, zgodnie z tym przykładem.

Podsumowanie

W tym artykule omówiliśmy przykłady kodu Validacji Adresata w wielu językach. Oto nasza prośba do Ciebie.

Daj nam znać, jeśli uważasz, że pominęliśmy Twój ulubiony język. Może nie mamy tylu przykładów co The Fibonacci Project, ale z chęcią dodamy więcej. Również, jeśli uważasz, że nasze przykłady można ulepszyć, daj nam znać!

Dołącz do naszego Newslettera.

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Dołącz do naszego Newslettera.

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Dołącz do naszego Newslettera.

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Logo Pinterest
Logo Uber
Square logo
Logo Adobe
Logo Meta
Logo PayPal

Company

Ustawienia prywatności

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Logo Uber
Square logo
Logo Adobe
Logo Meta

Company

Ustawienia prywatności

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.

Logo Uber
Logo Adobe
Logo Meta

Zasięg

Grow

Manage

Automate

Zasoby

Company

Biuletyn

Bądź na bieżąco z Bird dzięki cotygodniowym aktualizacjom do Twojej skrzynki odbiorczej.

Przesyłając, zgadzasz się, że Bird może kontaktować się z Tobą w sprawie naszych produktów i usług.

Możesz zrezygnować z subskrypcji w dowolnym momencie. Zobacz Privacy Statement firmy Bird, aby uzyskać szczegóły dotyczące przetwarzania danych.