SparkPost Validasi Penerima kini tersedia untuk pelanggan SparkPost yang sudah ada maupun pelanggan baru yang tidak mengirim. Ini menggunakan analisis berbasis data yang kuat dari miliaran peristiwa bounce, pengiriman, dan keterlibatan setiap hari untuk melatih algoritma kami, memberikan Anda salah satu alat validasi email berbasis data yang paling kuat di pasar, sehingga Anda dapat mengirim email dengan lebih cerdas.
Artikel ini menjelaskan bagaimana Anda dapat memanfaatkan data yang akan Anda terima kembali pada setiap penerima yang divalidasi – Anda akan melihat bahwa kami mengklasifikasikan alamat menjadi “valid”, “berisiko”, “netral”, “tidak dapat dikirim”, dan “kesalahan ketik”. Kami memberikan Anda kode “alasan” dan juga “did_you_mean” untuk kesalahan ketik alamat yang dikenal.
Panggilan API
Dalam aplikasi web SparkPost, Anda dapat menarik & melepas seluruh daftar untuk validasi. Anda juga dapat menggunakan API untuk memvalidasi alamat tunggal, sehingga Anda dapat membangun validasi langsung ke dalam alur kerja entri alamat Anda.
Beberapa waktu yang lalu kami menciptakan alat baris perintah Python menggunakan API ini. Kami membahas apa yang harus kami lakukan untuk bahasa lain – dan inilah kami! Mari kita mulai.
Folder repository Github ini memiliki contoh panggilan API Validasi Penerima yang berfungsi dalam sekitar selusin bahasa berbeda. Kami mencoba untuk mencakup bahasa yang paling populer yang dapat diterapkan.
Cara umum untuk bekerja melalui semua contoh ini adalah:
Ambil kunci Anda dari variabel lingkungan
SPARKPOST_API_KEY
Lakukan panggilan API ke
/api/v1/recipient-validation/single/
untuk memvalidasi penerimaTerima kembali string respons, yang berisi data terformat JSON dengan hasilnya
Cetak hasilnya
SparkPost memiliki perpustakaan untuk beberapa, tetapi tidak semua bahasa yang dibahas di sini. Kami memilih untuk menulis contoh ini secara “native” agar kami dapat a) mencakup lebih banyak bahasa, b) menunjukkan betapa sederhananya kode dasar, dan c) memungkinkan Anda untuk melihat dengan jelas kesamaan dan perbedaan antara bahasa-bahasa tersebut.
Bash / Curl
Ini memenangkan penghargaan untuk kode terpendek – hanya menggunakan alat baris perintah “curl” untuk melakukan permintaan dan mencetak balasan langsung ke terminal. Anda dapat melihat outputnya berupa string, yang berisi JSON; kami sebenarnya tidak memparsing atribut hasil individual.
PHP
PHP yang terpercaya memiliki beberapa cara berbeda untuk melakukan panggilan API HTTPS. Di sini kami memilih untuk menggunakan curl_setopt
dan curl_exec
. (https://www.php.net/manual/en/function.curl-exec.php)
Jika Anda lebih memilih HTTP_Request2 atau pecl_http, maka Postman memiliki generator kode bawaan yang dapat Anda gunakan untuk membuat contoh serupa – cukup atur permintaan GET yang berfungsi dan gunakan tombol “Kode”.
Python
Ini menggunakan modul populer requests, yang merupakan tingkat tinggi dan karena itu mudah digunakan. Contoh ini memeriksa kode status yang dikembalikan, mengonversi hasil JSON kembali menjadi objek dictionary Python, dan mencetak objek hasil alih-alih hanya string.
Jika Anda lebih menyukai pustaka bawaan http.client, Postman juga dapat menghasilkan kode untuk itu; tidak jauh lebih panjang.
Node.js
Ada banyak perpustakaan HTTP(S) node.js yang berbeda. Saya mulai dengan paket request yang lebih lama (menggunakan fungsi callback) tetapi sudah tidak digunakan lagi dan tidak lagi dirawat secara aktif. Saya memilih paket axios yang lebih baru (menggunakan janji).
Postman juga dapat memberikan Anda contoh native Javascript dan Unirest, jika Anda lebih memilih itu.
Karena kode ini membutuhkan akses ke kunci API Anda, kami sangat merekomendasikan untuk memanggil API kami dari sisi server Anda, bukan dari sisi klien (browser / perangkat seluler).
Go
Go berusaha menuju filosofi “satu cara yang baik” untuk melakukan sesuatu; dalam hal ini, menggunakan pustaka bawaan “baterai sudah termasuk” net/http, encoding/json dan lainnya.
Panjang kode sebagian besar disebabkan oleh klausul pemeriksaan kesalahan yang eksplisit if err != nil {}
di mana-mana (tidak ada pengecualian LOL).
Kami juga mendeklarasikan struktur objek hasil dengan tag field, untuk memungkinkan kami “mengurai” string JSON yang dikembalikan. Kami menumpuk tag “hasil” dan “kesalahan” untuk memungkinkan kedua jenis pengembalian.
Saya suka kecepatan, keamanan tipe, dan kejelasan Go, meskipun kode ini lebih panjang daripada contoh kami sebelumnya.
C#
Saya kurang akrab dengan C# – bagi saya, terlihat cukup mirip dengan Java, bukan C. Saya dapat menyusun ini mengikuti contoh yang ditunjukkan dalam pustaka request System.Net.Http.
Postman dapat menghasilkan kode contoh secara otomatis menggunakan RestSharp, jika Anda lebih menyukai itu.
Ruby
Ini adalah upaya pertama saya dalam kode Ruby; saya menggunakan pustaka Net::http, dan mengikuti contoh ini (yang ternyata sangat mirip dengan kode yang dihasilkan secara otomatis oleh Postman).
Saya mengalami satu keanehan bahasa / pustaka yang layak dijelaskan. Hanya menyiapkan dengan URI yang dimulai dengan “https://” tidaklah cukup, Anda harus secara khusus mengatur http.use_ssl = true
.
Tanpa ini, kode Anda akan mencoba melakukan permintaan di port 443 – tetapi tanpa menggunakan SSL/TLS (misalnya, dalam bentuk biasa), dan SparkPost akan dengan tepat menolak untuk mengotorisasi permintaan tersebut. Jangan coba ini di rumah, karena kunci API Anda ada di header Otorisasi. Fitur bahasa / pustaka ini terasa tidak aman bagi saya.
Java
Saya belum pernah menulis Java yang serius sebelumnya, tetapi mudah untuk merangkai ini dengan mengikuti pendekatan umum yang digunakan dalam pustaka SparkPost untuk panggilan GET lainnya.
Secara kebetulan, menggunakan VS Code sebagai editor / debugger saya sangat berhasil untuk semua bahasa di sini, memberi saya penyorotan sintaks, langkah debugger / tampilan variabel, dll. The InputStreamReader
dan BufferedReader
konstruksi mirip dengan (dan saya asumsikan diambil dari) Go.
C / C++
Ini adalah perjalanan menuju memori, karena saya menulis banyak kode C di tahun 1990-an, beberapa masih berjalan di jaringan telekomunikasi di suatu tempat. Karena sejarah C mendahului Web modern, tidak mengejutkan bahwa dukungan pustaka adalah tugas manual. Kami perlu mengunduh (dan mengompilasi) versi terbaru dari Libcurl, yang terhubung ke pustaka OpenSSL – lihat README untuk langkah-langkah aktual.
Ini terasa seperti banyak pekerjaan dibandingkan dengan bahasa modern, terutama ketika Go (atau Lua, atau Python, atau yang lainnya) cukup cepat untuk tugas seperti ini.
Hal lain yang saya lupakan, meskipun saya memiliki bekas luka dari pertempuran sebelumnya, adalah menakutkannya alokasi memori! Untuk menjaga contoh tetap sederhana, saya sebelumnya mengalokasikan panjang string URL sebagai 1024 karakter, dan memeriksa batas panjang alamat email (menggunakan strlen
) sebelum kami menggabungkan ke dalamnya (menggunakan strcat
).
Kami memperlakukan string Otorisasi dengan kunci API yang digabungkan dengan cara yang sama .. meskipun kami tahu kunci API yang valid tidak akan pernah terlalu panjang .. itu tidak ada perlindungan! Input pengguna yang berasal dari variabel lingkungan bisa jadi apa saja. Anda harus memprogram secara defensif.
Sebuah pengembang yang lebih canggih mungkin menggunakan malloc
daripada alokasi variabel tumpukan, dan menghitung seberapa panjang dua string yang digabungkan perlu. Harus memikirkan kompleksitas tambahan ini memberi saya rasa sakit di dioda bagian kiri saya; itu mengingatkan saya pada risiko yang dihadapi programmer C setiap hari, mencoba menghindari kelebihan buffer dan efek samping yang tidak terduga. Yang membawa kita ke ..
Lua
Lua dikenal karena keberadaannya yang mudah di samping sekumpulan kode C, dan di sini di SparkPost, kami menggunakan Lua secara ekstensif untuk kustomisasi Kebijakan di dalam MTA Momentum kami yang di lokasi. Anda juga dapat menggunakannya sebagai bahasa skrip mandiri, dan cukup bagus untuk itu juga.
Dengan Lua 5.3 dan manajer paket luarocks, kami menggunakan pustaka luasocket
dan luasec
. Menunjukkan warisan integrasi C-nya, kami menghubungkan ke pustaka OpenSSL lokal kami. Proses instal luarocks memanggil gcc
compiler (atau compiler C lain yang Anda gunakan), sehingga menambahkan pustaka baru memerlukan waktu.
Kode Lua ini cukup sederhana. Karakter — menandai komentar. Fungsi https.request
menyediakan beberapa nilai kembali (agak mirip dengan Python dan Go). Penggabungan string dilakukan dengan operator .. (dibandingkan dengan + di Python).
Body respons dari panggilan ini ditangani dengan modul “ltn12” – lihat di sini. Itu memungkinkan penanganan data dengan efisien yang dapat dikembalikan dalam “potongan” yang banyak. Seperti yang dijelaskan artikel itu:
Fabrik tabel membuat sebuah sink yang menyimpan semua data yang diperoleh ke dalam tabel. Data kemudian dapat dengan efisien digabungkan menjadi string tunggal dengan fungsi pustaka table.concat.
Contoh kami hanya menggabungkan tabel t dan mencetaknya; Anda dapat menggunakan filter untuk melakukan pemrosesan lebih lanjut.
Perl
Sementara Perl terkenal karena satu baris, ini bukan salah satunya. Perl dirancang untuk pencarian dan modifikasi dokumen yang sangat cepat, tetapi sebenarnya mampu melakukan jauh lebih banyak. Saya pernah menulis seluruh suite kontrol Inventaris di Perl. Siapa sangka. S e m u a n y a…
Script ini memanfaatkan LWP::UserAgent dan HTTP::Request dan secara opsional paket JSON dan Data::Dumper tergantung pada bagaimana Anda ingin melihat outputnya. Seperti semua script lain di halaman ini, Anda harus menyetel variabel lingkungan SPARKPOST_API_KEY
ke kunci API yang Anda hasilkan yang mencakup fungsi Validasi Penerima. Skrip ini mengodekan $recipient = ‘test@gmail.com’, tetapi Anda dapat dengan mudah menambahkan input baris perintah atau mengkonsumsi dari file.
Setelah semua variabel diisi, kami memuat HTTP:Request dengan parameter GET dan mengirimkannya ke LWP:UserAgent. “Pesan” yang dihasilkan adalah hasil dari tes validasi email sebagai array. Anda dapat menggunakan JSON dan DUMPER untuk menampilkan hasilnya atau hanya meneruskan array untuk pemrosesan tambahan.
VB.net
Visual Basic tidak visual dan tidak dasar (menurut pendapat saya), tetapi itu #6 di indeks bahasa TIOBE, jadi mari kita mulai.
Ada cara lain untuk melakukan ini, tetapi jalan termudah menuju kesuksesan adalah menggunakan SDK Visual Studio di platform Windows. Nyalakan Visual Studio, mulai proyek baru dan pilih Visual Basic, lalu pilih console.app. Pastikan untuk menggunakan versi VB, bukan versi C# – mudah untuk melewatkannya di SDK.
Saat ini Anda dapat mengedit baris secara manual atau menyalin/mem-paste kode dari sini ke dalam VS dan menghemat banyak waktu. Agar kode ini berfungsi, Anda perlu menambahkan variabel lingkungan Windows. Cara termudah untuk melakukan ini adalah membuka command prompt dan menggunakan setx.exe seperti ini:
C:\Users\me>setx SPARKPOST_API_KEY "142<redacted<redacted>c531c3"
Di Windows 10, ini diterapkan ke lingkungan pengguna Anda, tetapi tidak segera tersedia di sesi perintah saat ini, jadi mengujinya dengan “set” tidak akan berhasil, tetapi akan tersedia untuk kode tersebut. Jika Anda membangun dan menjalankan kode yang disertakan dalam repositori, Anda akan melihat hasil validasi.
Rust
Rust adalah bahasa untuk pemrograman sistem dan layanan web yang berfokus pada kinerja, keamanan, dan konkurensi. Seperti yang dikatakan Wikipedia, Rust telah menjadi “bahasa pemrograman yang paling dicintai” dalam Survei Pengembang Stack Overflow sejak 2016.
Kode Rust di repositori Github kami menggunakan pustaka reqwest
dengan tokio
asinkron, mirip dengan contoh ini dari buku masak Rust. (Itu bukan kesalahan ketik, nama pustaka reqwest
dieja seperti itu). Kami telah menyertakan file konfigurasi manajer paket cargo, sehingga Anda dapat membangun dan menjalankannya dengan:
cd rust_recipient_validation cargo run
Ini akan mengompilasi paket menjadi kode yang dapat dieksekusi, dan menjalankannya:
Selesai dev [tanpa optimasi + debuginfo] target(s) dalam 0.10s Menjalankan `target/debug/rust_recipient_validation` Status: 200 OK Body: : (dll)
Kode ini menggunakan std:env
untuk membaca variabel lingkungan SPARKPOST_API_KEY
. Klausul match menangani kasus di mana kunci tidak terdefinisi. Jika semua berjalan dengan baik, klien baru reqwest::Client
dibuat dan panggilan asinkron dikeluarkan, diikuti oleh .await?
(lihat di sini). Asinkron, daripada pemanggilan yang lebih sederhana, tampaknya diperlukan untuk mengatur header permintaan. Teks body respons dibaca dengan .await?
kedua, sesuai dengan contoh ini.
Ringkasan
Dalam artikel ini, kami telah membahas contoh kode Validasi Penerima dalam banyak bahasa. Inilah permintaan kami kepada Anda.
Biarkan kami tahu jika Anda merasa kami melewatkan bahasa favorit Anda. Kami mungkin tidak memiliki sebanyak contoh seperti Proyek Fibonacci, tetapi kami ingin menambahkan lebih banyak lagi. Juga, jika Anda merasa contoh kami dapat diperbaiki, beri tahu kami!