
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
PHP
Zaufane PHP ma kilka różnych sposobów na wykonywanie wywołań interfejsu API HTTPS. 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órego możesz użyć do tworzenia podobnych przykładów – po prostu skonfiguruj działające żądanie GET i użyj 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. InputStreamReader
i 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 nie jest wizualny i nie jest podstawowy (moim zdaniem), ale znajduje się na #6 miejscu w indeksie języków TIOBE, więc zaczynamy.
Są inne sposoby na to, ale najłatwiejsza droga do sukcesu to użycie Visual Studio SDK na platformie Windows. Uruchom Visual Studio, rozpocznij nowy projekt i wybierz Visual Basic, a następnie wybierz console.app. Upewnij się, że używasz wersji VB, a nie wersji C# – łatwo to przeoczyć w SDK.

Na tym etapie możesz edytować linie ręcznie lub kopiować/wklejać kod stąd do VS, oszczędzając mnóstwo czasu. Aby ten kod działał, musisz dodać zmienną środowiskową Windows. Najłatwiejszy sposób, aby to zrobić, to otworzyć wiersz poleceń i użyć setx.exe w ten sposób:
C:\Users\me>setx SPARKPOST_API_KEY "142<redacted<redacted>c531c3"
W Windows 10, to jest zastosowane do twojego środowiska użytkownika, ale nie jest od razu dostępne w bieżącej sesji poleceń, więc testowanie tego za pomocą „set” nie zadziała, ale będzie dostępne dla kodu. Jeśli zbudujesz i uruchomisz kod zawarty w repo, zobaczysz wynik walidacji.
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:env
do 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ć!