
SparkPost Recipient Validation jest teraz dostępny zarówno dla istniejących klientów SparkPost, jak i dla nowych, niepiszących klientów. Wykorzystuje potężną analizę opartą na danych na miliardach dziennych zdarzeń związanych z odbiciami, dostawą i zaangażowaniem, aby szkolić nasz algorytm, oferując jedno z najpotężniejszych narzędzi do weryfikacji adresów e-mail 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, niewysyłających klientów. Wykorzystuje potężną analizę opartą na danych, opartą na miliardach zdarzeń związanych z odbiciem, dostawą i zaangażowaniem każdego dnia, aby szkolić nasz algorytm, dostarczając jedno z najbardziej potężnych narzędzi do walidacji email na rynku, dzięki czemu możesz mądrzej wysyłać e-maile. To reprezentuje najnowszą ewolucję w technikach walidacji email, przechodząc poza proste kontrole składni do zaawansowanych podejść opartych na danych, które zapewniają dokładniejsze wyniki.
Ten artykuł wyjaśnia, jak możesz maksymalnie wykorzystać dane, które otrzymasz dla każdego zweryfikowanego odbiorcy – zobaczysz, że klasyfikujemy adresy jako „valid”, „risky”, „neutral”, „undeliverable” i „typo”. Dajemy Ci kod „reason”, a także „did_you_mean” dla znanych literówek adresów.
Żądania API
W aplikacji webowej SparkPost możesz przeciągnąć i upuścić całą listę do walidacji. Możesz również użyć API, aby zweryfikować pojedyncze adresy, dzięki czemu możesz wbudować walidację bezpośrednio w swój proces wprowadzania adresów.
Jakiś czas temu stworzyliśmy narzędzie wiersza poleceń Python wykorzystujące to API. Rozmawialiśmy o tym, co powinniśmy zrobić dla innych języków – i oto jesteśmy! Zaczynajmy.
Ten folder repozytorium Github zawiera działające przykłady wywołań API Walidacji Odbiorcy w około tuzinie różnych języków. Staramy się uwzględniać najbardziej popularne odpowiednie języki.
Ogólny sposób pracy z tymi wszystkimi przykładami jest następujący:
Pobierz swój klucz z zmiennej środowiskowej
SPARKPOST_API_KEY
Zrób wywołanie API na
/api/v1/recipient-validation/single/
, aby zweryfikować odbiorcęOtrzymasz z powrotem ciąg odpowiedzi zawierający dane w formacie JSON z wynikiem
Wydrukuj wynik
SparkPost ma biblioteki dla niektórych, ale nie wszystkich języków objętych tutaj. Zdecydowaliśmy się napisać te przykłady „natomiast”, abyśmy mogli 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 zobaczenie podobieństw i różnic między językami.
Bash / Curl
PHP
Zaufana PHP ma kilka różnych sposobów wykonywania wywołań API HTTPS. Tutaj zdecydowaliśmy się użyć curl_setopt
oraz 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ć, aby utworzyć podobne przykłady – wystarczy skonfigurować działające zapytanie GET i użyć przycisku „Code”.

Python
To wykorzystuje popularny moduł requests, który jest na wysokim poziomie, a więc łatwy w użyciu. Ten przykład sprawdza zwrócony kod statusu, konwertuje wyniki JSON z powrotem na obiekt słownika Python i drukuje wynikowy obiekt, a nie tylko ciąg znaków.
Jeśli wolisz wbudowaną bibliotekę http.client, Postman może również wygenerować do tego kod; nie jest to o wiele dłuższe.
Node.js
Istnieje wiele różnych bibliotek HTTP(S) dla node.js. Zacząłem od starszego pakietu request (używającego funkcji zwrotnej), ale został on wycofany i nie jest już aktywnie utrzymywany. Wybrałem nowszy pakiet axios (używający promises).
Postman może również zapewnić Ci przykład natywny dla Javascript i Unirest, jeśli wolisz tamte.
Ponieważ ten kod wymaga dostępu do Twojego klucza API, zdecydowanie zalecamy wywołanie naszego API z serwera, nigdy z klienta (przeglądarka / urządzenie mobilne).
Go
Go dąży do filozofii „jednego dobrego sposobu” na zrobienie czegoś; w tym przypadku poprzez używanie wbudowanych bibliotek „z bateriami” takich jak net/http, encoding/json i innych.
Długość wynika głównie z wyraźnych klauzul sprawdzających błędy if err != nil {}
wszędzie ( brak wyjątków LOL).
Deklarujemy również strukturę obiektu wynikowego z tagami pól, aby umożliwić nam „odpakowanie” zwróconego łańcucha JSON. Nakładamy tagi „results” i „errors”, aby dopuścić oba rodzaje zwrotu.
Podoba mi się szybkość, bezpieczeństwo typów i przejrzystość Go, nawet jeśli kod jest dłuższy niż w naszych poprzednich przykładach.
C#
Nie jestem zbyt zaznajomiony z C# – dla mnie wygląda dość podobnie do Java, niż do C. Udało mi się to złożyć, korzystając z przykładów pokazanych w bibliotece request System.Net.Http.
Postman może automatycznie generować przykładowy kod, używając 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 generuje automatycznie Postman).
Natrafiłem na jedną osobliwość języka / biblioteki, która jest warta wyjaśnienia. Samo użycie URI, który zaczyna się od „https://” nie wystarczy, trzeba konkretnie ustawić http.use_ssl = true
.
Bez tego, Twój kod spróbuje wykonać żądanie na porcie 443 – ale bez użycia SSL/TLS (tj. w zwykłym tekstowym trybie), i 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 cecha języka / biblioteki wydawała mi się niebezpieczna.
Java
Nie pisałem wcześniej żadnego poważnego kodu w Javie, ale było łatwo to zebrać, śledząc ogólne podejście używane w bibliotece SparkPost dla innych wywołań GET.
Przy okazji, używanie VS Code jako mojego edytora / debugera działało naprawdę dobrze dla wszystkich języków tutaj, zapewniając podświetlanie składni, kroki debugera / podgląd zmiennych itp. Konstrukty InputStreamReader
i BufferedReader
są podobne do (i zakładam, że zostały skopiowane przez) Go.
C / C++
To była podróż wzdłuż wspomnień, ponieważ pisałem dużo kodu C w latach 90., który nadal działa gdzieś w głębokich sieciach telekomunikacyjnych. Ponieważ historia C poprzedza nowoczesny Web, nie jest zaskoczeniem, że wsparcie bibliotek jest zadaniem ręcznym. Musimy pobrać (i skompilować) najnowszą wersję Libcurl, łącząc ją z biblioteką OpenSSL – zobacz README dla rzeczywistych kroków.
To wydaje się być dużo pracy w porównaniu do nowoczesnych języków, szczególnie gdy Go (lub Lua, lub Python, lub jakikolwiek inny) są wystarczająco szybkie dla takich zadań.
Druga rzecz, o której zapomniałem, mimo że noszę blizny po poprzednich bitwach, to strach przed alokacją pamięci! Aby uprościć przykład, wstępnie przydzieliłem długość ciągu URL do 1024 znaków i sprawdziłem długość adresu e-mail (używając strlen
) zanim go połączymy (używając strcat
).
Traktujemy ciąg autoryzacji z połączonym kluczem API w ten sam sposób .. mimo że wiemy, że ważny klucz API nigdy nie będzie zbyt długi .. to żadna ochrona! Dane wejściowe użytkownika pochodzące z zmiennej środowiskowej mogą być czymkolwiek. Musisz programować defensywnie.
Bardziej zaawansowany deweloper mógłby użyć malloc
zamiast alokacji zmiennych stosu, i dokładnie obliczyć, jak długie powinny być połączone ciągi. Myślenie o tej dodatkowej złożoności dało mi ból w diodach po lewej stronie; przypomniało mi to o ryzykach, jakie codziennie podejmują programiści C, próbując unikać przepełnień bufora i nieoczekiwanych efektów ubocznych. Co prowadzi nas do ..
Lua
Lua jest znany ze swojej łatwej koegzystencji z kodem C, a tutaj w SparkPost, używamy Lua intensywnie do dostosowań polityki w naszej stacjonarnej MTM Momentum. Możesz również używać go jako samodzielnego języka skryptowego i jest do tego całkiem dobry.
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 inny kompilator C, którego używasz), więc dodawanie nowych bibliotek trwa chwilę.
Kod Lua jest dość prosty. Znaki — oznaczają komentarze. Funkcja https.request
zapewnia wiele wartości zwrotnych (trochę jak w Pythonie i Go). Łączenie ciągów znaków odbywa się za pomocą operatora .. (zamiast + w Pythonie).
Ciało odpowiedzi z tego wywołania jest obsługiwane za pomocą modułu „ltn12” – zobacz tutaj. To umożliwia efektywne zarządzanie danymi, które mogą być zwrócone w wielu „kawałkach”. Jak wyjaśnia ten artykuł:
Fabryka tablic tworzy sink, który przechowuje wszystkie otrzymane dane w tabeli. Dane mogą później być efektywnie łączone w jeden ciąg za pomocą funkcji bibliotecznej table.concat.
Nasz przykład po prostu łączy tabelę t i drukuje ją; możesz użyć filtra do dalszego przetwarzania.
Perl
Chociaż Perl jest znany z one liners, to nie jest jeden 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 pakiet zarządzania zapasami w Perl. Wyobraź sobie. W każdym razie…
Ten skrypt wykorzystuje LWP::UserAgent i HTTP::Request oraz opcjonalnie pakiety JSON i Data::Dumper w zależności od tego, jak chcesz zobaczyć wyniki. Podobnie jak w przypadku wszystkich innych skryptów na tej stronie, powinieneś wcześniej ustawić zmienną środowiskową SPARKPOST_API_KEY
na swoją wygenerowaną klucz API, który zawiera funkcję weryfikacji odbiorców. Ten skrypt na stałe koduje $recipient = ‘test@gmail.com’, ale możesz łatwo dodać dane wejściowe z wiersza poleceń lub pobrać je z pliku.
Po zapełnieniu wszystkich zmiennych, ładowany jest HTTP:Request z parametrami GET i wysyłany do LWP:UserAgent. Otrzymana „wiadomość” to wynik testu walidacji e-mail jako tablica. Możesz użyć JSON i DUMPER do wyświetlenia wyniku lub po prostu przekazać tablicę do dalszego przetwarzania.
VB.net
Visual Basic nie jest wizualny i nie jest podstawowy (IMHO), ale jest na #6 miejscu w indeksie języków TIOBE, więc tutaj zaczynamy.
Istnieją inne sposoby na to, ale najprostszą drogą do sukcesu jest użycie SDK Visual Studio 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żna edytować linie ręcznie lub skopiować/wkleić kod stąd do VS i zaoszczędzić mnóstwo czasu. Aby ten kod działał, musisz dodać zmienną środowiskową Windows. Najprostszym sposobem na to jest otwarcie wiersza polecenia i użycie setx.exe tak, jak poniżej:
C:\Users\me>setx SPARKPOST_API_KEY "142<redacted<redacted>c531c3"
W Windows 10, jest to stosowane do środowiska użytkownika, ale nie jest natychmiast 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 skonstruujesz i uruchomisz kod zawarty w repo, zobaczysz wynik walidacji. Dla deweloperów budujących produkcyjne konsumery webhook, które muszą walidować adresy e-mail na dużą skalę, nasz przewodnik konsumenta webhooków Azure Functions pokazuje, jak zbudować bezserwerowe rozwiązania, które mogą efektywnie obsługiwać przepływy walidacji.
Rust
Rust to język do programowania systemów i usług sieciowych, skupiający się na wydajności, bezpieczeństwie i współbieżności. Jak mówi Wikipedia, Rust był „najbardziej ukochanym językiem programowania” w ankiecie dla deweloperów Stack Overflow od 2016 roku.
Kod Rust w naszym repozytorium Github używa biblioteki reqwest
z tokio
async, podobnie jak ten przykład z książki kucharskiej Rust. (To nie literówka, nazwa biblioteki reqwest
jest pisana w ten sposób). Dołączyliśmy plik konfiguracyjny menedżera pakietów cargo, więc możesz zbudować i uruchomić za pomocą:
cd rust_recipient_validation cargo run
To skompiluje pakiet do kodu wykonywalnego i uruchomi go:
Dev ukończony [nieoptymalizowane + debuginfo] cel(e) w 0,10 sekundy Uruchamianie `target/debug/rust_recipient_validation` Status: 200 OK Body: : (itd.)
Kod używa std:env
do odczytania zmiennej środowiskowej SPARKPOST_API_KEY
. Klauzula match obsługuje sytuację, gdy klucz jest niezdefiniowany. Jeśli wszystko jest w porządku, tworzony jest nowy reqwest::Client
i wykonywane jest wywołanie asynchroniczne, po którym następuje .await?
(zobacz tutaj). Wygląda na to, że do ustawienia nagłówków żądania potrzebne jest async, a nie prostsze wywołanie blokujące. Tekst ciała odpowiedzi jest odczytywany za pomocą drugiego .await?
, zgodnie z tym przykładem.
Podsumowanie
W tym artykule omówiliśmy przykłady kodu Validate Odbiorcy 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 chętnie dodamy więcej. Również, jeśli uważasz, że nasze przykłady można ulepszyć, daj nam znać!