
SparkPost Recipient Validation sekarang tersedia untuk pelanggan SparkPost yang sudah ada dan juga untuk pelanggan baru yang tidak mengirim. Ini menggunakan analisis data yang kuat pada miliaran kejadian bouncing, 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.
Business in a box.
Temukan solusi kami.
Bicaralah kepada tim penjualan kami
SparkPost Recipient Validation sekarang tersedia baik untuk pelanggan SparkPost yang sudah ada maupun untuk pelanggan baru yang tidak mengirim. Ini menggunakan analisis berbasis data yang kuat pada miliaran kejadian pembalikan, pengiriman, dan keterlibatan setiap hari untuk melatih algoritme kami, menghadirkan kepada 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 kami mengklasifikasikan alamat menjadi “valid”, “risky”, “neutral”, “undeliverable”, dan “typo”. Kami memberi Anda kode “reason” dan juga “did_you_mean” untuk kesalahan pengetikan alamat yang diketahui.
API permintaan
Dalam aplikasi web SparkPost, Anda dapat drag & drop 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 lalu kami membuat alat baris perintah Python menggunakan API ini. Kami berdiskusi tentang apa yang harus kami lakukan untuk bahasa lain – dan inilah kami! Mari kita mulai.
Folder repositori Github ini memiliki contoh panggilan API Validasi Penerima yang berfungsi dalam sekitar selusin bahasa yang berbeda. Kami mencoba mencakup bahasa yang paling populer diterapkan.
Cara umum 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 berformat JSON dengan hasilnya
Cetak hasilnya
SparkPost memiliki perpustakaan untuk beberapa, tetapi tidak semua bahasa yang dicakup di sini. Kami memilih untuk menulis contoh ini secara “native” sebagai gantinya, sehingga a) kami dapat mencakup lebih banyak bahasa, b) menunjukkan betapa sederhana kode dasarnya, dan c) memungkinkan Anda untuk melihat dengan jelas persamaan dan perbedaan antara bahasa.
Bash / Curl
PHP
PHP yang terpercaya memiliki beberapa cara berbeda untuk membuat 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 suka HTTP_Request2 atau pecl_http, maka Postman memiliki generator kode bawaan yang dapat Anda gunakan untuk membuat contoh serupa – cukup siapkan permintaan GET yang berfungsi dan gunakan tombol "Code".

Python
Ini menggunakan modul requests yang populer, yang merupakan tingkat tinggi dan oleh karena itu mudah digunakan. Contoh ini memeriksa kode status yang dikembalikan, mengkonversi JSON hasil kembali ke dalam objek kamus Python, dan mencetak objek yang dihasilkan alih-alih hanya sebuah string.
Jika Anda lebih menyukai pustaka bawaan http.client, Postman dapat menghasilkan kode untuk itu juga; ini tidak terlalu panjang.
Node.js
Ada banyak perpustakaan HTTP(S) node.js yang berbeda. Saya mulai dengan paket request yang lebih lama (menggunakan fungsi callback) tetapi itu sudah tidak digunakan lagi dan tidak lagi dipelihara secara aktif. Saya memilih paket axios yang lebih baru (menggunakan promises).
Postman juga dapat memberikan Anda contoh asli Javascript dan Unirest, jika Anda lebih menyukai yang tersebut.
Karena kode ini membutuhkan akses ke kunci API Anda, kami sangat menyarankan memanggil API kami dari sisi server Anda, bukan dari sisi klien (browser/perangkat seluler).
Go
Go berupaya menuju filosofi “satu cara yang baik” untuk melakukan sesuatu; dalam hal ini, menggunakan perpustakaan “baterai sudah termasuk” bawaan net/http, encoding/json dan lainnya.
Panjang kode sebagian besar disebabkan oleh klausa pengecekan kesalahan eksplisit if err != nil {}
di mana-mana (tidak ada pengecualian LOL).
Kami juga mendeklarasikan struktur objek hasil dengan tag bidang, untuk memungkinkan kami “mengurai” string yang dikembalikan JSON. Kami menimpa tag “results” dan “errors” untuk memungkinkan kedua jenis pengembalian.
Saya suka kecepatan, keamanan tipe dan kejelasan Go, meskipun kodenya lebih panjang dari contoh sebelumnya kami.
C#
Saya kurang familiar dengan C# – bagi saya, itu terlihat cukup mirip dengan Java, daripada mirip dengan C. Saya bisa menyusun ini dengan mengikuti contoh yang ditunjukkan di perpustakaan permintaan System.Net.Http.
Postman dapat secara otomatis menghasilkan contoh kode menggunakan RestSharp, jika Anda lebih suka demikian.
Ruby
Ini adalah upaya pertama saya dalam kode Ruby; saya menggunakan perpustakaan Net::http, dan mengikuti contoh ini (yang ternyata sangat mirip dengan kode yang dihasilkan secara otomatis oleh Postman).
Saya mengalami satu keanehan bahasa / perpustakaan yang layak dijelaskan. Hanya melakukan pengaturan menggunakan URI yang dimulai dengan “https://” tidaklah cukup, Anda harus secara khusus mengatur http.use_ssl = true
.
Tanpa ini, kode Anda akan mencoba membuat permintaan di port 443 – tetapi tanpa menggunakan SSL/TLS (yaitu secara jelas), dan SparkPost akan dengan tepat menolak mengotorisasi permintaan tersebut. Jangan coba-coba ini di rumah, karena kunci API Anda ada di header Authorization. Fitur bahasa / perpustakaan ini terasa tidak aman bagi saya.
Java
Saya belum pernah menulis Java serius sebelumnya, tetapi mudah untuk merangkainya dengan mengikuti pendekatan umum yang digunakan dalam SparkPost library untuk panggilan GET lainnya.
Sebetulnya, menggunakan VS Code sebagai editor / debugger saya bekerja sangat baik untuk semua bahasa di sini, memberi saya penyorotan sintaks, langkah debugger / melihat variabel dll. The InputStreamReader
dan BufferedReader
mirip dengan (dan saya kira disalin oleh) Go.
C / C++
Ini adalah perjalanan menyusuri jalur kenangan, karena saya menulis banyak kode C pada tahun 1990-an, beberapa masih berjalan dalam jaringan telekomunikasi di suatu tempat. Karena sejarah C mendahului Web modern, tidak mengherankan bahwa dukungan perpustakaan merupakan tugas manual. Kita perlu mengunduh (dan menyusun) versi terbaru dari Libcurl, menautkan ke perpustakaan OpenSSL – lihat README untuk langkah-langkah sebenarnya.
Ini terasa seperti banyak pekerjaan dibandingkan dengan bahasa modern, terutama ketika Go (atau Lua, atau Python, atau yang lainnya) sudah cukup cepat untuk tugas-tugas seperti ini.
Hal lain yang saya lupakan, meskipun mempunyai bekas luka dari pertempuran sebelumnya, adalah menakutkannya alokasi memori! Untuk menjaga contoh tetap sederhana, saya memprealokasi panjang string URL sebanyak 1024 karakter, dan memeriksa batas panjang alamat email (menggunakan strlen
) sebelum kita menggabungkannya (menggunakan strcat
).
Kami memperlakukan string Otorisasi dengan API key gabungan dengan cara yang sama .. meskipun kita tahu bahwa API key yang valid tidak akan pernah terlalu panjang .. itu bukan perlindungan! Masukan pengguna yang berasal dari variabel lingkungan bisa apa saja. Anda harus memprogram secara defensif.
Seorang pengembang yang lebih canggih mungkin menggunakan malloc
alih-alih alokasi variabel stack, dan menghitung seberapa panjang string yang digabungkan perlu. Memikirkan tentang kompleksitas ekstra ini membuat saya sakit pada dioda di sisi kiri saya; ini mengingatkan saya pada risiko yang dihadapi programmer C setiap hari, mencoba menghindari buffer overruns dan efek samping yang tidak terduga. Yang membawa kita ke ..
Lua
Lua dikenal karena kemampuannya untuk berdampingan dengan mudah bersama kode C, dan di SparkPost, kami menggunakan Lua secara ekstensif untuk kustomisasi Kebijakan di dalam Momentum MTA lokal kami. Anda juga dapat menggunakannya sebagai bahasa scripting mandiri, dan itu cukup bagus untuk itu juga.
Dengan Lua 5.3 dan pengelola paket luarocks, kami menggunakan pustaka luasocket
dan luasec
. Menunjukkan warisan integrasi C-nya, kami terhubung ke pustaka OpenSSL lokal kami. Proses instalasi luarocks memanggil compiler gcc
(atau compiler C lainnya yang Anda gunakan), sehingga menambahkan pustaka baru membutuhkan waktu.
Kode Lua cukup sederhana. Karakter — menandai komentar. Fungsi https.request
menyediakan banyak nilai pengembalian (sedikit seperti Python dan Go). Konkatenasi string dilakukan dengan operator .. (menggantikan + dalam Python).
Isi respons dari pemanggilan ini ditangani dengan modul “ltn12” – lihat di sini. Itu memungkinkan penanganan data yang efisien yang dapat dikembalikan dalam beberapa “chunk”. Seperti yang dijelaskan artikel tersebut:
Pabrik tabel membuat sink yang menyimpan semua data yang diperoleh ke dalam tabel. Data kemudian dapat digabungkan dengan efisien menjadi string tunggal dengan fungsi pustaka table.concat.
Contoh kami hanya menggabungkan tabel t dan mencetaknya; Anda dapat menggunakan filter untuk melakukan lebih banyak pemrosesan.
Perl
Sementara Perl terkenal dengan one liners, ini bukan salah satunya. Perl dirancang untuk pencarian dan modifikasi dokumen yang sangat cepat, tetapi sebenarnya mampu melakukan lebih banyak hal. Saya pernah menulis seluruh suite kontrol Inventaris dalam Perl. Bayangkan saja. Pokoknya…
Script ini memanfaatkan LWP::UserAgent dan HTTP::Request dan secara opsional paket JSON dan Data::Dumper tergantung pada bagaimana Anda ingin melihat hasil keluaran. Seperti semua skrip lain di halaman ini, Anda harus menetapkan variabel lingkungan SPARKPOST_API_KEY
ke kunci API yang telah Anda buat yang mencakup fungsi Validasi Penerima. Skrip ini mengkodekan ulang $recipient = ‘test@gmail.com’ tetapi Anda dapat dengan mudah menambahkan input baris perintah atau mengkonsumsinya dari sebuah berkas.
Setelah semua variabel terisi, kami memuat sebuah HTTP:Request dengan parameter GET dan mengirimkannya ke LWP:UserAgent. “Pesan” yang dihasilkan adalah hasil dari tes validasi email sebagai sebuah array. Anda dapat menggunakan JSON dan DUMPER untuk menampilkan hasilnya atau cukup meneruskan array untuk pemrosesan tambahan.
VB.net
Visual Basic tidak visual dan tidak basic (IMHO), tetapi ini berada di peringkat #6 pada indeks bahasa TIOBE jadi mari kita mulai.
Ada cara lain untuk melakukan ini, tetapi jalur termudah menuju kesuksesan adalah menggunakan SDK Visual Studio pada platform Windows. Jalankan Visual Studio, mulai proyek baru dan pilih Visual Basic, lalu pilih console.app. Pastikan untuk menggunakan versi VB bukan versi C# – mudah untuk melewatkan itu di SDK.

Pada titik ini Anda bisa mengedit baris secara manual atau menyalin/menempel kode dari sini ke dalam VS dan menghemat banyak waktu. Untuk membuat kode ini berfungsi, Anda perlu menambahkan variabel lingkungan Windows. Cara termudah untuk melakukan ini adalah dengan 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 langsung tersedia di sesi perintah saat ini, sehingga mengujinya dengan "set" tidak akan berhasil, tetapi itu akan tersedia untuk kode. Jika Anda membangun dan menjalankan kode yang disertakan dalam repo, Anda akan melihat hasil validasi.
Rust
Rust adalah bahasa pemrograman untuk sistem dan layanan web yang berfokus pada kinerja, keamanan, dan konkruensi. Seperti yang dikatakan Wikipedia, Rust telah menjadi 'bahasa pemrograman yang paling disukai' dalam Survei Pengembang Stack Overflow sejak 2016.
Kode Rust di repo Github kami menggunakan pustaka reqwest
dengan tokio
async, mirip dengan contoh ini dari buku masak Rust. (Itu bukan kesalahan ketik, nama pustaka reqwest
disebut seperti itu). Kami telah menyertakan file konfigurasi pengelola paket cargo di sini, sehingga Anda dapat membangun dan menjalankan dengan:
cd rust_recipient_validation cargo run
Ini akan mengkompilasi paket menjadi kode dapat eksekusi, dan menjalankannya:
Selesai dev [tidak dioptimalkan + debuginfo] target dalam 0.10s Menjalankan `target/debug/rust_recipient_validation` Status: 200 OK Body: : (dan lain-lain)
Kode menggunakan std:env
untuk membaca variabel lingkungan SPARKPOST_API_KEY
. Klausul match menangani kasus di mana kunci tidak terdefinisi. Jika semua baik-baik saja, reqwest::Client
baru dibuat dan panggilan async diterbitkan, diikuti oleh .await?
(lihat di sini). Async, daripada panggilan pemblokiran yang lebih sederhana, tampaknya dibutuhkan untuk mengatur header permintaan. Teks tubuh tanggapan dibaca dengan .await?
kedua, seperti contoh ini.
Summary
Dalam artikel ini, kami telah membahas contoh kode Validasi Penerima dalam berbagai bahasa. Berikut permintaan kami kepada Anda.
Beri tahu kami jika Anda pikir kami melewatkan bahasa favorit Anda. Kami mungkin tidak memiliki sebanyak contoh seperti The Fibonacci Project, tetapi kami ingin menambahkan lebih banyak lagi. Juga, jika Anda berpikir contoh kami bisa diperbaiki, beri tahu kami!