Empfängerverifizierung: Beispiele für E-Mail-Verifizierungscodes

SparkPost Empfänger-Validierung ist jetzt sowohl für bestehende SparkPost-Kunden als auch für neue, nicht sendende Kunden verfügbar. Es nutzt leistungsstarke datengetriebene Analysen von Milliarden von Bounce-, Zustell- und Interaktionsereignissen täglich, um unseren Algorithmus zu trainieren und Ihnen eines der leistungsstärksten datengetriebenen E-Mail-Validierungstools auf dem Markt zu bieten, damit Sie E-Mails intelligenter senden können.

Author

Vogel

Kategorie

E-Mail

Empfängerverifizierung: Beispiele für E-Mail-Verifizierungscodes

SparkPost Empfänger-Validierung ist jetzt sowohl für bestehende SparkPost-Kunden als auch für neue, nicht sendende Kunden verfügbar. Es nutzt leistungsstarke datengetriebene Analysen von Milliarden von Bounce-, Zustell- und Interaktionsereignissen täglich, um unseren Algorithmus zu trainieren und Ihnen eines der leistungsstärksten datengetriebenen E-Mail-Validierungstools auf dem Markt zu bieten, damit Sie E-Mails intelligenter senden können.

Author

Vogel

Kategorie

E-Mail

Empfängerverifizierung: Beispiele für E-Mail-Verifizierungscodes

SparkPost Empfänger-Validierung ist jetzt sowohl für bestehende SparkPost-Kunden als auch für neue, nicht sendende Kunden verfügbar. Es nutzt leistungsstarke datengetriebene Analysen von Milliarden von Bounce-, Zustell- und Interaktionsereignissen täglich, um unseren Algorithmus zu trainieren und Ihnen eines der leistungsstärksten datengetriebenen E-Mail-Validierungstools auf dem Markt zu bieten, damit Sie E-Mails intelligenter senden können.

Author

Vogel

Kategorie

E-Mail

SparkPost Empfängervalidierung ist jetzt sowohl für bestehende SparkPost-Kunden als auch für neue, nicht sendende Kunden verfügbar. Es nutzt leistungsstarke datengestützte Analysen von Milliarden von Bounce-, Zustell- und Engagementereignissen täglich, um unseren Algorithmus zu trainieren, und bietet Ihnen eines der leistungsstärksten datengestützten E-Mail-Validierungstools auf dem Markt, damit Sie E-Mails intelligenter versenden können.

Dieser Artikel erklärt, wie Sie das Beste aus den Daten herausholen können, die Sie für jeden validierten Empfänger zurückerhalten – Sie werden sehen, dass wir Adressen als „gültig“, „riskant“, „neutral“, „unzustellbar“ und „Tippfehler“ klassifizieren. Wir geben Ihnen einen „Grund“-Code und auch ein „did_you_mean“ für bekannte Adress-Tippfehler.


API-Anfragen

Im SparkPost-Web-App können Sie eine gesamte Liste per Drag & Drop zur Validierung hochladen. Sie können auch die API verwenden, um einzelne Adressen zu validieren, sodass Sie die Validierung direkt in Ihren Adresseneingabe-Workflow integrieren können.

Vor einer Weile haben wir ein Python-Befehlszeilenwerkzeug unter Verwendung dieser API entwickelt. Wir haben darüber gesprochen, was wir für andere Sprachen tun sollten – und hier sind wir! Lassen Sie uns beginnen.

Dieser Github-Repository-Ordner enthält funktionierende Beispiele für API-Aufrufe zur Empfängervalidierung in etwa einem Dutzend verschiedener Sprachen. Wir versuchen, die beliebtesten anwendbaren Sprachen abzudecken.

Der gängige Weg, durch all diese Beispiele zu arbeiten, ist:

  • Holen Sie Ihren Schlüssel aus der Umgebungsvariable SPARKPOST_API_KEY

  • Führen Sie einen API-Aufruf an /api/v1/recipient-validation/single/ durch, um einen Empfänger zu validieren

  • Erhalten Sie eine Antwortzeichenfolge zurück, die JSON-formatierten Daten mit dem Ergebnis enthält

  • Drucken Sie das Ergebnis aus

SparkPost bietet Bibliotheken für einige, aber nicht alle der hier behandelten Sprachen. Wir haben uns entschieden, diese Beispiele „nativ“ zu schreiben, um a) mehr Sprachen abzudecken, b) zu zeigen, wie einfach der zugrunde liegende Code sein kann, und c) Ihnen klar die Ähnlichkeiten und Unterschiede zwischen den Sprachen zu zeigen.


Bash / Curl

Dies gewinnt den Preis für den kürzesten Code – es verwendet einfach das Befehlszeilenwerkzeug „curl“, um die Anfrage zu stellen und die Antwort direkt im Terminal auszugeben. Sie können sehen, dass die Ausgabe eine Zeichenfolge enthält, die JSON enthält; wir analysieren tatsächlich nicht die einzelnen Ergebnisattribute.


PHP

Verlässliches PHP bietet verschiedene Möglichkeiten, HTTPS-API-Anfragen zu stellen. Hier haben wir uns entschieden, curl_setopt und curl_exec zu verwenden. (https://www.php.net/manual/en/function.curl-exec.php)

Wenn Sie HTTP_Request2 oder pecl_http bevorzugen, hat Postman einen eingebauten Code-Generator, den Sie verwenden können, um ähnliche Beispiele zu erstellen – richten Sie einfach eine funktionierende GET-Anfrage ein und verwenden Sie die Schaltfläche „Code“.


Python

Dies nutzt das beliebte requests-Modul, das hochgradig und daher einfach zu verwenden ist. Dieses Beispiel überprüft den zurückgegebenen Statuscode, konvertiert die JSON-Ergebnisse zurück in ein Python-Wörterbuchobjekt und druckt das resultierende Objekt aus, anstatt nur eine Zeichenfolge.

Wenn Sie die integrierte http.client-Bibliothek bevorzugen, kann Postman auch dafür Code generieren; es ist nicht viel länger.


Node.js

Es gibt viele verschiedene Node.js-HTTP(S)-Bibliotheken. Ich habe mit dem älteren request-Paket (unter Verwendung einer Callback-Funktion) begonnen, aber es ist veraltet und wird nicht mehr aktiv betreut. Ich habe das neuere axios-Paket (unter Verwendung von Versprechen) gewählt.

Postman kann Ihnen auch ein natives Javascript-Beispiel und Unirest geben, falls Sie diese bevorzugen.

Da dieser Code Zugriff auf Ihren API-Schlüssel benötigt, empfehlen wir dringend, unsere API von Ihrer Server-Seite aus aufzurufen, niemals von der Client-Seite (Browser / mobiles Gerät) aus.


Go

Go strebt eine Philosophie von „einem guten Weg“ an, um etwas zu tun; in diesem Fall wird die integrierte „Batterien im Lieferumfang enthalten“-Bibliotheken net/http, encoding/json und andere verwendet.

Die Länge der Methode ist hauptsächlich auf die expliziten Fehlerprüfungsanweisungen if err != nil {} überall zurückzuführen (keine Ausnahmen LOL).

Wir deklarieren auch die Struktur des Ergebnisobjekts mit Feldmarkierungen, um uns zu ermöglichen, die zurückgegebene JSON-Zeichenfolge „zu entpacken“. Wir überlagern die Tags „results“ und „errors“, um beide Arten von Rückgaben zuzulassen.

Ich mag die Geschwindigkeit, Typsicherheit und Klarheit von Go, auch wenn der Code länger ist als unsere vorherigen Beispiele.


C#

Ich bin mit C# weniger vertraut – für mich sieht es ziemlich Java-ähnlich aus, anstatt C-ähnlich. Ich konnte dies zusammenstellen, indem ich Beispielen folgte, die in der Anfragebibliothek System.Net.Http gezeigt wurden.

Postman kann automatisch Beispielcode mit RestSharp generieren, wenn Sie das bevorzugen.


Ruby

Dies war mein erster Versuch mit Ruby-Code; ich verwendete die Net::http-Bibliothek und folgte diesem Beispiel (das sich als sehr nah an dem herausstellt, was Postman automatisch generiert).

Ich stieß auf eine Eigenheit der Sprache / Bibliothek, die es wert ist, erklärt zu werden. Es reicht nicht aus, nur eine URI einzurichten, die mit „https://“ beginnt, Sie müssen http.use_ssl = true speziell festlegen.

Ohne dies versucht Ihr Code, eine Anfrage an Port 443 zu senden – jedoch ohne SSL/TLS zu verwenden (d.h. im Klartext), und SparkPost wird die Anfrage zu Recht ablehnen. Versuchen Sie dies nicht zu Hause, denn Ihr API-Schlüssel befindet sich im Authorization-Header. Dieses Merkmal der Sprache / Bibliothek fühlte sich für mich unsicher an.


Java

Ich habe noch nie ernsthaft Java geschrieben, aber es war einfach, dies zusammenzustellen, indem ich dem allgemeinen Ansatz folgte, der in der SparkPost-Bibliothek für andere GET-Aufrufe verwendet wird.

Übrigens, die Verwendung von VS Code als Editor / Debugger hat sich für alle hier behandelten Sprachen sehr gut bewährt und bietet mir Syntax-Highlighting, Debugger-Schritt- und Variablenansicht usw. The InputStreamReader und BufferedReader -Konstrukte sind ähnlich (und ich nehme an, sie wurden von) Go kopiert.


C / C++

Dies war eine Reise in die Erinnerungen, da ich in den 1990er Jahren viel C-Code geschrieben habe, von dem einige noch tief in Telekommunikationsnetzen laufen. Da die Geschichte von C die moderne Web-Vorläufer, ist es nicht überraschend, dass die Unterstützung von Bibliotheken eine manuelle Aufgabe ist. Wir müssen eine aktuelle Version von Libcurl herunterladen (und kompilieren) und sie mit einer OpenSSL-Bibliothek verlinken – siehe die README für die tatsächlichen Schritte.

Dies fühlt sich im Vergleich zu modernen Sprachen wie viel Arbeit an, insbesondere wenn Go (oder Lua, oder Python oder andere) schnell genug für solche Aufgaben sind.

Eine andere Sache, die ich vergessen hatte, obwohl ich die Narben aus vorherigen Kämpfen trage, ist die Angst vor der Speicherzuweisung! Um das Beispiel einfach zu halten, habe ich die URL-Zeichenfolgenlänge auf 1024 Zeichen vorab zugewiesen und die Länge der E-Mail-Adresse (unter Verwendung von strlen) überprüft, bevor wir sie verketten (unter Verwendung von strcat).

Wir behandeln die Autorisierungszeichenfolge mit einem verketteten API-Schlüssel auf die gleiche Weise .. auch wenn wir wissen, dass ein gültiger API-Schlüssel niemals zu lang sein wird .. das ist kein Schutz! Benutzereingaben aus einer Umgebungsvariable könnten beliebig sein. Sie müssen defensiv programmieren.

Ein ausgeklügelter Entwickler könnte malloc anstelle von Stack-Variablenzuweisungen verwenden und genau berechnen, wie lang die verknüpften Zeichenfolgen sein müssen. An diese zusätzliche Komplexität zu denken, gab mir ein Schmerz in den Dioden auf meiner linken Seite; es erinnerte mich an die Risiken, mit denen C-Programmierer täglich umgehen, wenn sie versuchen, Bufferüberläufe und unerwartete Nebenwirkungen zu vermeiden. Was uns zu ..


Lua

Lua ist bekannt für seine einfache Koexistenz mit einem Körper von C-Code, und hier bei SparkPost haben wir Lua umfassend genutzt für Richtlinieneinstellungen innerhalb unseres Momentum-on-Premises-MTA. Sie können es auch als eigenständige Skriptsprache verwenden, und dafür ist es auch ziemlich schön.

Mit Lua 5.3 und dem luarocks-Paketmanager verwenden wir die Bibliotheken luasocket und luasec. Angesichts seines C-Integrations-Erbes verlinken wir auf unsere lokale OpenSSL-Bibliothek. Der luarocks-Installationsprozess ruft den gcc-Compiler (oder jeden C-Compiler, den Sie verwenden) auf, sodass das Hinzufügen neuer Bibliotheken etwas Zeit in Anspruch nimmt.

Der Lua-Code ist ganz einfach. Die Zeichen — kennzeichnen Kommentare. Die Funktion https.request bietet mehrere Rückgabewerte (ein bisschen wie Python und Go). Die String-Verkettung erfolgt mit dem Operator .. (anstatt + in Python).

Der Antwortinhalt von diesem Aufruf wird mit dem „ltn12“-Modul behandelt – siehe hier. Das ermöglicht eine effiziente Verarbeitung Daten, die in mehreren „Chunks“ zurückgegeben werden könnten. Wie dieser Artikel erklärt:

Die Tabellenfabrik erstellt einen Sink, der alle erhaltenen Daten in einer Tabelle speichert. Die Daten können später effizient in einer einzigen Zeichenfolge mit der Tabelle.concat-Bibliotheksfunktion verkettet werden.

Unser Beispiel verketten einfach die Tabelle t und gibt sie aus; Sie könnten einen Filter verwenden, um weitere Verarbeitungen durchzuführen.


Perl

Obwohl Perl berühmt ist für seine One-Liner, ist dies keiner davon. Perl wurde für sehr schnelle Dokumentensuche und -änderung entworfen, kann jedoch tatsächlich so viel mehr. Ich habe einst eine gesamte Inventarkontrollsuite in Perl geschrieben. Woher auch immer…

Dieses Skript verwendet LWP::UserAgent und HTTP::Request und optional die JSON- und Data::Dumper-Pakete, je nachdem, wie Sie die Ausgabe sehen möchten. Wie bei allen anderen Skripten auf dieser Seite sollten Sie eine Umgebungsvariable SPARKPOST_API_KEY mit Ihrem generierten API-Schlüssel, der die Empfängervalidierungsfunktion enthält, vordefinieren. Dieses Skript hat $recipient = ‘test@gmail.com’ fest codiert, aber Sie können leicht Eingaben über die Befehlszeile hinzufügen oder von einer Datei konsumieren.

Nachdem alle Variablen gefüllt sind, laden wir eine HTTP:Request mit GET-Parametern und senden sie an die LWP:UserAgent. Die resultierende „Nachricht“ ist das Ergebnis des E-Mail-Validierungstests als Array. Sie können JSON und DUMPER verwenden, um das Ergebnis anzuzeigen, oder das Array einfach zur weiteren Verarbeitung übergeben.


VB.net

Visual Basic ist nicht visuell und es ist nicht grundlegend (meiner Meinung nach), aber es ist #6 im TIOBE-Sprachindex, also legen wir los.

Es gibt andere Möglichkeiten, dies zu tun, aber der einfachste Weg zum Erfolg besteht darin, das Visual Studio SDK auf einer Windows-Plattform zu verwenden. Starten Sie Visual Studio, erstellen Sie ein neues Projekt und wählen Sie Visual Basic, dann wählen Sie console.app. Stellen Sie sicher, dass Sie die VB-Version und nicht die C#-Version verwenden – das kann man im SDK leicht übersehen.


An diesem Punkt können Sie Zeilen manuell bearbeiten oder den Code von hier in VS kopieren/einfügen und eine Menge Zeit sparen. Um diesen Code funktionsfähig zu machen, müssen Sie eine Windows-Umgebungsvariable hinzufügen. Der einfachste Weg, dies zu tun, ist, eine Eingabeaufforderung zu öffnen und setx.exe wie folgt zu verwenden:

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

In Windows 10 wird dies auf Ihre Benutzerumgebung angewendet, ist jedoch in der aktuellen Befehlsitzung nicht sofort verfügbar, sodass es nicht funktioniert, wenn Sie mit „set“ testen, es wird jedoch für den Code verfügbar sein. Wenn Sie den Code im Repo erstellen und ausführen, sehen Sie das Validierungsergebnis.


Rust

Rust ist eine Sprache für Systeme und Webdienstprogrammierung, die sich auf Leistung, Sicherheit und Parallelität konzentriert. Wie Wikipedia sagt, ist Rust seit 2016 die „beliebteste Programmiersprache“ in der Stack Overflow-Entwicklerumfrage.

Der Rust-Code in unserem Github-Repo verwendet die reqwest-Bibliothek zusammen mit tokio async, ähnlich wie dieses Beispiel aus dem Rust-Kochbuch. (Das ist kein Tippfehler, der reqwest-Bibliotheksname wird so geschrieben). Wir haben eine Cargo-Paketmanager-Konfigurationsdatei beigefügt, sodass Sie mitfolgendes bauen und ausführen können:

cd rust_recipient_validation cargo run

Dies wird das Paket in ausführbaren Code kompilieren und ausführen:

Fertig dev [nicht optimiert + Debug-Info] Ziel(e) in 0.10s Ausführung `target/debug/rust_recipient_validation` Status: 200 OK Body: : (usw.)

Der Code verwendet std:env, um die SPARKPOST_API_KEY-Umgebungsvariable zu lesen. Eine Match-Klausel behandelt den Fall, in dem der Schlüssel undefiniert ist. Wenn alles gut geht, wird ein neuer reqwest::Client erstellt und ein asynchroner Aufruf ausgegeben, gefolgt von einem .await? (siehe hier). Async, anstelle des einfacheren blockierenden Aufrufs, scheint erforderlich zu sein, um Anfrageheader festzulegen. Der Text des Antwortkörpers wird mit einem zweiten .await? gelesen, wie in diesem Beispiel.


Zusammenfassung

In diesem Artikel haben wir die Beispiele für die Empfängervalidierung in vielen Sprachen durchlaufen. Hier ist unsere Bitte an Sie.

Teilen Sie uns mit, wenn Sie denken, dass wir Ihre bevorzugte Sprache verpasst haben. Wir haben möglicherweise nicht so viele Beispiele wie Das Fibonacci-Projekt, aber wir würden uns freuen, noch mehr hinzuzufügen. Wenn Sie außerdem denken, dass unsere Beispiele verbessert werden können, lassen Sie es uns wissen!

Bereit, Bird in Aktion zu sehen?

Schedule a demo now.

Die KI-gestützte Plattform für Marketing, Support und Finanzen

Indem Sie auf "Demo anfordern" klicken, stimmen Sie Bird's zu

Die KI-gestützte Plattform für Marketing, Support und Finanzen

Indem Sie auf "Demo anfordern" klicken, stimmen Sie Bird's zu

Die KI-gestützte Plattform für Marketing, Support und Finanzen

Indem Sie auf "Demo anfordern" klicken, stimmen Sie Bird's zu