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

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”.

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

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 nie jest wizualny i nie jest podstawowy (moim zdaniem), ale znajduje się na #6 miejscu w indeksie języków TIOBE, więc zaczynamy.

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.

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.


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: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ć!

Połączmy Cię z ekspertem Bird.
Zobacz pełną moc Bird w 30 minut.

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.

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.

Połączmy Cię z ekspertem Bird.
Zobacz pełną moc Bird w 30 minut.

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.

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.

Połączmy Cię z ekspertem Bird.
Zobacz pełną moc Bird w 30 minut.

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.

R

Reach

G

Grow

M

Manage

A

Automate

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.