Reach

Grow

Manage

Automate

Reach

Grow

Manage

Automate

Validasi Penerima: Contoh Kode Verifikasi Email

Bird

8 Jul 2020

Email

1 min read

Validasi Penerima: Contoh Kode Verifikasi Email

Bird

8 Jul 2020

Email

1 min read

Validasi Penerima: Contoh Kode Verifikasi Email

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.

SparkPost Recipient Validation sekarang tersedia untuk pelanggan SparkPost yang sudah ada dan untuk pelanggan baru yang tidak mengirim. Ini menggunakan analisis berbasis data yang kuat pada miliaran peristiwa bounce, pengiriman, dan keterlibatan setiap hari untuk melatih algoritma kami, menghadirkan salah satu alat validasi email berbasis data paling kuat di pasar, sehingga Anda dapat mengirim email dengan lebih cerdas. Ini merupakan evolusi terbaru dalam teknik validasi email, melampaui pemeriksaan sintaks sederhana hingga pendekatan berbasis data yang canggih yang memberikan hasil yang lebih akurat.

Artikel ini menjelaskan bagaimana Anda dapat memanfaatkan data yang Anda terima kembali pada setiap penerima yang divalidasi – Anda akan melihat bahwa kami mengklasifikasikan alamat sebagai “valid”, “risky”, “neutral”, “undeliverable”, dan “typo”. Kami memberi Anda kode “reason” dan juga “did_you_mean” untuk kesalahan alamat yang diketahui.

API permintaan

Dalam aplikasi web SparkPost, Anda dapat menyeret & melepaskan seluruh daftar untuk validasi. Anda juga dapat menggunakan API untuk memvalidasi alamat tunggal, sehingga Anda dapat membangun validasi langsung ke alur kerja entri alamat Anda.

Beberapa waktu lalu kami membuat sebuah alat baris perintah Python menggunakan API ini. Kami membahas apa yang seharusnya 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 yang berbeda. Kami mencoba untuk mencakup bahasa paling populer.

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 penerima

  • Terima kembali string respons, yang berisi data yang diformat JSON dengan hasilnya

  • Cetak hasilnya

SparkPost memiliki perpustakaan untuk beberapa, tetapi tidak semua bahasa yang tercakup di sini. Kami memilih untuk menulis contoh ini secara "native" sebagai gantinya, sehingga 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.

Bash / Curl

Ini memenangkan hadiah untuk kode terpendek – ini hanya menggunakan alat baris perintah “curl” untuk membuat permintaan dan mencetak balasan langsung ke terminal. Anda dapat melihat bahwa outputnya adalah sebuah string, berisi JSON; kami sebenarnya tidak mem-parsing atribut hasil individual.

Ini memenangkan hadiah untuk kode terpendek – ini hanya menggunakan alat baris perintah “curl” untuk membuat permintaan dan mencetak balasan langsung ke terminal. Anda dapat melihat bahwa outputnya adalah sebuah string, berisi JSON; kami sebenarnya tidak mem-parsing atribut hasil individual.

Ini memenangkan hadiah untuk kode terpendek – ini hanya menggunakan alat baris perintah “curl” untuk membuat permintaan dan mencetak balasan langsung ke terminal. Anda dapat melihat bahwa outputnya adalah sebuah string, berisi JSON; kami sebenarnya tidak mem-parsing atribut hasil individual.

PHP

PHP yang dapat dipercaya memiliki beberapa cara berbeda untuk melakukan panggilan API HTTPS. Di sini kita 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 pembuat kode bawaan yang dapat Anda gunakan untuk membuat contoh serupa – cukup setel permintaan GET yang berfungsi dan gunakan tombol “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

Ini menggunakan modul requests yang populer, yang merupakan level tinggi dan karena itu mudah digunakan. Contoh ini memeriksa kode status yang dikembalikan, mengonversi hasil JSON kembali menjadi objek kamus Python, dan mencetak objek hasil daripada hanya string.

Jika Anda lebih suka pustaka http.client bawaan, Postman dapat menghasilkan kode untuk itu juga; itu tidak terlalu panjang.

Node.js

Ada banyak jenis pustaka HTTP(S) node.js. Saya memulai dengan paket request yang lebih lama (menggunakan fungsi callback) tetapi sudah ditandai sebagai usang dan tidak lagi dikelola secara aktif. Saya memilih paket axios yang lebih baru (menggunakan promises).

Postman juga dapat memberikan Anda contoh asli dalam Javascript dan Unirest, jika Anda lebih suka yang itu.

Karena kode ini memerlukan akses ke kunci API Anda, kami sangat menyarankan untuk memanggil API kami dari sisi server Anda, bukan dari sisi klien (browser / perangkat mobile).

Go

Go berupaya menuju filosofi “satu cara yang baik” untuk melakukan sesuatu; dalam hal ini, menggunakan perpustakaan bawaan “baterai termasuk” net/http, encoding/json dan lainnya.

Panjang kode ini sebagian besar disebabkan oleh klausa pengecekan kesalahan eksplisit if err != nil {} di mana-mana (tanpa pengecualian LOL).

Kami juga mendeklarasikan struktur objek hasil dengan tag bidang, untuk memungkinkan kami melakukan “unmarshal” string JSON yang dikembalikan. Kami melapisi tag “results” dan “errors” untuk mengizinkan kedua jenis pengembalian.

Saya suka kecepatan, jenis-keamanan, dan kejelasan Go, bahkan jika kodenya lebih panjang dari contoh sebelumnya.

C#

Saya kurang familiar dengan C# – bagi saya, ini terlihat cukup mirip dengan Java, daripada mirip dengan C. Saya dapat menyusun ini dengan mengikuti contoh yang ditunjukkan di perpustakaan permintaan System.Net.Http.

Postman dapat secara otomatis menghasilkan kode contoh menggunakan RestSharp, jika Anda lebih suka itu.

Ruby

Ini adalah upaya pertama saya pada 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 penting untuk dijelaskan. Hanya menggunakan URI yang dimulai dengan "https://" tidak cukup, Anda harus secara khusus mengatur http.use_ssl = true

Tanpa ini, kode Anda akan mencoba permintaan pada port 443 – tetapi tanpa menggunakan SSL/TLS (yaitu dalam bentuk yang jelas), dan SparkPost akan menolak untuk mengotorisasi permintaan tersebut. Jangan coba ini di rumah, karena kunci API Anda ada di header Authorization. Fitur bahasa/perpustakaan ini terasa tidak aman bagi saya.

Java

Saya belum menulis Java serius sebelumnya, tetapi mudah untuk menyusunnya dengan mengikuti pendekatan umum yang digunakan dalam perpustakaan SparkPost untuk panggilan GET lainnya.

Kebetulan, menggunakan VS Code sebagai editor / debugger saya bekerja dengan sangat baik untuk semua bahasa di sini, memberi saya penyorotan sintaks, penjajakan debugger / tampilan variabel, dll. The InputStreamReaderdan BufferedReaderkonstruk serupa dengan (dan saya mengasumsikan disalin oleh) Go.

C / C++

Ini adalah perjalanan menyusuri 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 adalah tugas manual. Kita perlu mengunduh (dan menyusun) versi terbaru dari Libcurl, menghubungkannya 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 lain) cukup cepat untuk tugas-tugas seperti ini.

Hal lain yang saya lupakan, meskipun menanggung bekas luka dari pertempuran sebelumnya, adalah mengerikannya alokasi memori! Untuk menjaga contoh tetap sederhana, saya mengalokasikan terlebih dahulu panjang string URL sebagai 1024 karakter, dan memeriksa panjang alamat email (menggunakan strlen) sebelum kita menggabungkannya (menggunakan strcat).

Kami memperlakukan string Otorisasi dengan kunci API yang digabungkan dengan cara yang sama .. meskipun kita tahu kunci API yang valid tidak akan pernah terlalu panjang .. itu bukan perlindungan! Masukan pengguna yang datang dari variabel lingkungan bisa berupa apa saja. Anda harus memprogram secara defensif.

Pengembang yang lebih canggih mungkin menggunakan malloc alih-alih alokasi variabel stack, dan menghitung seberapa panjang sebenarnya string yang digabungkan. Harus memikirkan kompleksitas ekstra ini memberi saya rasa sakit di dioda di sisi kiri saya; itu mengingatkan saya tentang risiko yang dihadapi oleh programmer C setiap hari, mencoba menghindari kelebihan buffer dan efek samping yang tidak terduga. Yang membawa kita ke ..

Lua

Lua dikenal karena kemudahannya beroperasi bersama kode C, dan di SparkPost, kami menggunakan Lua secara ekstensif untuk kustomisasi Kebijakan di dalam Momentum MTA di tempat kami. Anda juga dapat menggunakannya sebagai bahasa pemrograman mandiri, dan itu cukup bagus untuk itu juga.

Dengan Lua 5.3 dan luarocks package manager, kami menggunakan pustaka luasocket dan luasec. Menunjukkan warisan integrasi C-nya, kami terhubung ke perpustakaan OpenSSL lokal kami. Proses instalasi luarocks memanggil kompiler gcc (atau kompiler C apa pun yang Anda gunakan), jadi menambahkan pustaka baru memerlukan waktu.

Kode Lua cukup sederhana. Karakter — menandai komentar. Fungsi https.request menyediakan beberapa nilai kembali (mirip dengan Python dan Go). Gabungan string dilakukan dengan operator .. (bukan + di Python).

Badan respons dari panggilan ini ditangani dengan modul “ltn12” – lihat di sini. Itu memungkinkan penanganan data yang efisien yang dapat dikembalikan dalam beberapa “potongan”. Seperti yang dijelaskan dalam artikel tersebut:

Pabrik tabel membuat sink yang menyimpan semua data yang diperoleh ke dalam tabel. Data kemudian dapat digabungkan dengan efisien menjadi satu string dengan fungsi perpustakaan table.concat.

Contoh kita 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 lagi. Saya pernah menulis seluruh suite kontrol Inventaris di Perl. Cobalah untuk memahami. S e b a g a i m a n a p u n…

Skrip ini menggunakan LWP::UserAgent dan HTTP::Request dan opsional paket JSON dan Data::Dumper tergantung pada bagaimana Anda ingin melihat output. Seperti semua skrip lainnya di halaman ini, Anda harus menetapkan variabel lingkungan SPARKPOST_API_KEY dengan kunci API yang Anda hasilkan yang mencakup fungsi Validasi Penerima. Skrip ini mengkodekan langsung $recipient = ‘test@gmail.com’ tetapi Anda dapat dengan mudah menambahkan input dari command-line atau mengonsumsi dari sebuah 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 cukup meneruskan array untuk pemrosesan tambahan.

VB.net

Visual Basic tidak visual dan bukan basic (IMHO), tetapi ini adalah #6 di indeks bahasa TIOBE jadi mari kita mulai.

Ada cara lain untuk melakukan ini, tetapi jalur termudah menuju kesuksesan adalah dengan menggunakan SDK Visual Studio di platform Windows. Buka Visual Studio, mulai proyek baru dan pilih Visual Basic, kemudian pilih console.app. Pastikan untuk menggunakan versi VB bukan versi C# – mudah untuk melewatkannya dalam 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.


Pada titik ini Anda dapat mengedit baris secara manual atau copy/paste kode dari sini ke dalam VS dan menghemat banyak waktu. Untuk membuat kode ini berfungsi, Anda perlu menambahkan variabel lingkungan Windows. Cara termudah untuk melakukannya 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 tersedia segera di sesi perintah saat ini, sehingga mengetesnya dengan “set” tidak akan berhasil, tetapi itu akan tersedia bagi kode tersebut. Jika Anda membangun dan menjalankan kode yang ada di repo, Anda akan melihat hasil validasi. Untuk pengembang yang membangun konsumen webhook produksi yang perlu memvalidasi alamat email dalam skala besar, panduan konsumen webhook Azure Functions kami menunjukkan cara membangun solusi serverless yang dapat menangani alur kerja validasi secara efisien.

Rust

Rust adalah bahasa pemrograman untuk sistem dan layanan web yang berfokus pada kinerja, keamanan, dan keberlangsungan. Seperti yang dikatakan Wikipedia, Rust telah menjadi “bahasa pemrograman paling dicintai” dalam Survei Pengembang Stack Overflow sejak 2016.

Kode Rust di repo Github kami menggunakan perpustakaan reqwest dengan tokio async, mirip dengan contoh ini dari buku masak Rust. (Itu bukan salah ketik, nama perpustakaan reqwest memang ditulis 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:

Finished dev [unoptimized + debuginfo] target(s) in 0.10s Running `target/debug/rust_recipient_validation` Status: 200 OK Body: : (dll)

Kode ini menggunakan std:env untuk membaca variabel lingkungan SPARKPOST_API_KEY. Sebuah klausa match menangani kasus di mana kunci tidak ditentukan. Jika semua berjalan lancar, sebuah 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 respons dibaca dengan .await? kedua, seperti pada contoh ini.

Summary

Dalam artikel ini, kami telah menjelaskan contoh kode Validasi Penerima dalam berbagai bahasa. Berikut adalah permintaan kami kepada Anda.

Beri tahu kami jika Anda merasa kami melewatkan bahasa favorit Anda. Kami mungkin tidak memiliki sebanyak contoh seperti The Fibonacci Project, tetapi kami ingin menambah beberapa lagi. Juga, jika Anda berpikir contoh kami dapat ditingkatkan, beri tahu kami!

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.

Mari hubungkan Anda dengan pakar Bird.
Lihat kekuatan penuh dari Bird dalam 30 menit.

Dengan mengirimkan, Anda setuju Bird dapat menghubungi Anda tentang produk dan layanan kami.

Anda dapat berhenti berlangganan kapan saja. Lihat Pernyataan Privasi Bird untuk detail tentang pemrosesan data.

R

Reach

G

Grow

M

Manage

A

Automate

Perusahaan

Newsletter

Tetap terinformasi dengan Bird melalui pembaruan mingguan ke kotak masuk Anda.