Cek Blacklist Email: Yang Tidak Diberitahu Alat Lookup
Summary
Cek blacklist email adalah lookup DNS atas IP atau domain pengirim Anda terhadap blocklist publik. Hasilnya menjawab satu pertanyaan: apakah alamat ini tercantum sekarang. Hasil itu tidak memprediksi apakah Gmail atau Outlook akan menerima email Anda. Jalankan dari host dengan resolver sendiri, validasi zona dengan entri uji 127.0.0.2, perlakukan jawaban 127.255.255.x sebagai penolakan dan bukan hasil, lalu baca teks bounce terlebih dahulu.
Cek blacklist email biasanya menghasilkan tabel baris hijau dan merah setelah Anda memasukkan IP pengirim ke alat pencarian multi-daftar. Tabel itu menjawab satu pertanyaan yang sempit: apakah alamat ini sekarang tercantum di sejumlah daftar hitam DNS publik. Hasilnya tidak memberi tahu apakah Gmail, Outlook, atau gateway perusahaan akan menerima pesan Anda berikutnya. Menganggap keduanya sebagai pertanyaan yang sama adalah sumber utama salah baca di hampir setiap linimasa insiden pengiriman.
Artikel ini membahas apa yang sebenarnya ditanyakan oleh sebuah cek, cara menjalankannya sendiri dengan dig, kode hasil mana yang berarti bersih dan mana yang berarti kueri Anda ditolak, serta cara memasang semuanya ke monitoring supaya Anda tidak perlu mengeceknya secara manual pada jam 2 pagi.
Cek blacklist email hanyalah kueri DNS
Setiap DNS blocklist (DNSBL) bekerja dengan cara yang sama. Anda membalik oktet alamat IPv4, menambahkan zona daftar, lalu meminta rekord A. RFC 5782 mendefinisikan konvensinya: untuk 192.0.2.99 yang dicek terhadap bad.example.com, kuerinya adalah 99.2.0.192.bad.example.com. Jika alamat tercantum, Anda mendapat jawaban di rentang 127.0.0.0/8. Jika tidak tercantum, tidak ada rekord yang dikembalikan.
Itulah seluruh mekanismenya. Alat web tempat Anda menempelkan IP menjalankan puluhan lookup seperti ini secara paralel, lalu memformat jawabannya menjadi tabel yang rapi.
# Apakah 203.0.113.25 tercantum di Spamhaus ZEN?
dig +short 25.113.0.203.zen.spamhaus.org A
# Lookup ke daftar berbasis domain bekerja dengan cara yang sama, tanpa pembalikan:
dig +short example.com.dbl.spamhaus.org AOutput kosong berarti tidak tercantum. Jawaban 127.x.x.x berarti tercantum, dan dua oktet terakhir menunjukkan sub-daftar mana yang cocok. Jalankan dari mesin yang Anda kendalikan, terhadap resolver Anda sendiri, dan Anda bisa membuat skripnya, mencatat hasilnya, lalu memasang alert.

Cek alamat tempat email Anda keluar, bukan alamat website Anda
Kesalahan pertama adalah memeriksa IP yang salah. Website pemasaran, API, dan relay email keluar biasanya adalah tiga alamat yang berbeda. Yang penting adalah IP di header Received dari pesan yang benar-benar sampai ke kotak masuk.
Jika Anda mengirim lewat ESP di infrastruktur bersama, IP itu bukan milik Anda, dan listing-nya juga bukan milik Anda. Jika Anda mengirim dari IP khusus, IP itu sepenuhnya milik Anda, termasuk apa pun yang dilakukan penyewa sebelumnya pada rentang tersebut. Karena itu, pemeriksaan pertama selalu berupa pertanyaan tentang kepemilikan: IP ini sedang dipakai siapa, dan sejak kapan.
Ambil IP pengirim dari pesan yang sudah terkirim, bukan dari pengaturan di dasbor. Lalu cek tiga hal secara terpisah: IP pengirim, domain envelope dan From, serta setiap domain yang muncul di tautan Anda, termasuk host tracking dan unsubscribe. Daftar berbasis URI seperti URIBL dan SURBL menilai tautan di dalam badan pesan. Jadi IP yang bersih tidak melindungi pesan yang menunjuk ke domain yang tercantum.
Hasil bersih dari resolver publik bisa jadi penolakan yang menyamar
Ini adalah mode kegagalan yang tidak pernah disebut oleh halaman cek generik. Spamhaus tidak menjawab kueri yang datang lewat resolver publik atau terbuka, dan mereka memberi sinyal itu dengan kode hasil, bukan dengan listing. Spamhaus mendokumentasikan 127.255.255.254 sebagai kode error, bukan hasil reputasi, dan menyatakan bahwa kode itu tidak boleh dipakai untuk menolak email.
Ada dua konsekuensinya. Jika skrip Anda membaca jawaban 127.x apa pun sebagai "tercantum", kueri yang ditolak dari resolver cloud akan membangunkan Anda untuk listing yang sebenarnya tidak ada. Jika skrip Anda membaca "tidak ada jawaban yang bisa dipakai" sebagai "bersih", Anda akan diam-diam melewatkan listing sungguhan, karena penolakan itu juga bisa muncul sebagai respons kosong atau NXDOMAIN.
Solusinya adalah menjalankan lookup dari host yang memiliki resolver rekursif sendiri dan reverse DNS yang benar, atau memakai layanan kueri gratis yang disarankan Spamhaus kepada pengguna mirror publik. Lalu validasi zonanya sebelum Anda mempercayainya. RFC 5782 mewajibkan daftar IPv4 memiliki entri untuk 127.0.0.2 dan tidak memiliki entri untuk 127.0.0.1, sehingga Anda bisa menguji setup Anda seperti ini:
dig +short 2.0.0.127.zen.spamhaus.org A # harus mengembalikan jawaban 127.x
dig +short 1.0.0.127.zen.spamhaus.org A # harus tidak mengembalikan apa punJika keduanya tidak mengembalikan apa pun, jalur resolver Anda rusak atau ditolak. Perbaiki itu sebelum membaca hasil apa pun darinya.

Sebagian besar insiden pengiriman bukan insiden blocklist
Pada tinjauan bounce, pertanyaan pertama sebelum melakukan lookup apa pun adalah apa yang sebenarnya dikatakan server penerima. Sebuah listing menghasilkan penolakan yang spesifik. Masalah reputasi di penyedia mailbox menghasilkan penolakan yang berbeda, dan tidak ada daftar publik yang akan menunjukkannya.
Dokumentasi pengirim Google cukup lugas soal ini. Respons 550 5.7.1 bisa berarti IP pengirim ada di daftar yang ditangguhkan, sering kali karena reputasi IP bersama yang buruk, sementara 5.7.26 mengarah ke autentikasi yang gagal. Untuk pengirim bulk, Google mensyaratkan SPF, DKIM, dan DMARC, DNS maju dan balik yang valid pada IP pengirim, TLS, serta tingkat spam di bawah 0,30% di Postmaster Tools. Persyaratan pengirim Gmail mencantumkan 0,10% sebagai target yang disarankan.
Bacalah ini sebagai urutan prioritas. Jika teks bounce menyebut zona atau URL DNSBL, Anda punya masalah listing. Jika teks itu menyebut reputasi, autentikasi, atau batas laju, cek blocklist akan kembali bersih, dan Anda hanya membuang satu jam untuk membuktikannya.
Menyebut zona atau URL DNSBL: Anda tercantum di daftar spesifik itu. Jalankan lookup, lalu gunakan halaman penghapusan milik operator daftar tersebut.
550 5.7.1dengan kata "IP reputation": reputasi di sisi penyedia, sering kali pada IP bersama. Cek Postmaster Tools serta tren volume dan keluhan.5.7.26: autentikasi gagal. Periksa keselarasan SPF, DKIM, dan DMARC.4.7.28atau teks yang berkaitan dengan laju: Anda mengirim terlalu cepat untuk reputasi Anda saat ini. Turunkan kecepatan, lalu naikkan kembali secara bertahap.
Lewati cek satu kali sebagai monitoring Anda
Cek satu kali hanya memberi tahu kondisi pada saat Anda menekan enter. Listing sering bersifat sementara, dan banyak yang muncul setelah lonjakan yang Anda sebabkan sendiri: impor kontak dingin, blast izin ulang, atau formulir yang disalahgunakan untuk mengirim spam.
Alat yang memungut biaya untuk "menghapus Anda dari 100 blacklist" menjual layanan untuk masalah yang tidak dimiliki sebagian besar daftar itu. Banyak daftar dalam cek multi yang umum hanya berdampak kecil pada penyedia mailbox arus utama, dan penghapusan biasanya gratis serta bisa dilakukan sendiri di halaman operator. Mengejar setiap baris merah membuang waktu yang seharusnya dipakai untuk dua atau tiga daftar yang benar-benar dikonsultasikan oleh penerima Anda.
Urutkan daftar berdasarkan trafik yang Anda kirim. Lihat penerima mana yang muncul di bounce Anda, cari daftar yang secara publik dipakai oleh penerima tersebut, lalu pantau daftar itu. Sisanya cukup ditinjau sebulan sekali.

Ubah cek menjadi job terjadwal dengan ambang alert
Berikut versi minimal yang layak dipakai. Skrip ini berjalan dari host dengan resolver sungguhan, memvalidasi zona lebih dulu, dan membedakan tiga hasil: tercantum, tidak tercantum, dan kueri ditolak.
import socket
def dnsbl(ip: str, zone: str) -> str:
rev = ".".join(reversed(ip.split(".")))
try:
answer = socket.gethostbyname(f"{rev}.{zone}")
except socket.gaierror:
return "not_listed"
if answer.startswith("127.255.255."):
return "refused" # kode error, bukan hasil reputasi
return f"listed:{answer}"
# Periksa zona sebelum mempercayainya (entri uji RFC 5782)
assert dnsbl("127.0.0.2", "zen.spamhaus.org").startswith("listed")
assert dnsbl("127.0.0.1", "zen.spamhaus.org") == "not_listed"Jalankan setiap 15 sampai 60 menit per IP pengirim dan per domain pengirim, catat setiap hasil dengan timestamp, dan beri alert hanya saat terjadi transisi dari not_listed ke listed. Beri alert terpisah untuk refused, karena itu berarti monitoring Anda buta, bukan berarti reputasi Anda berubah.
Padukan dengan sinyal yang biasanya bergerak lebih cepat daripada blocklist. Tingkat keluhan dari dasbor Postmaster, tingkat bounce per domain penerima, dan tingkat deferral per jam bergerak sebelum listing muncul. Angka-angka inilah yang memberi tahu Anda apakah perlu menjeda sebuah pengiriman. Jika Anda sudah mengirim log dan metrik ke stack monitoring, hasil lookup hanyalah satu time series lagi di sana.
Empat alat cocok untuk alur kerja ini, tergantung di mana masalah Anda berada.
Postmark hanya untuk transaksional, jadi email reset password Anda tidak berbagi jalur pengiriman dengan blast newsletter orang lain. Jika listing Anda terus terlacak ke tetangga di infrastruktur bersama, memisahkan pengiriman transaksional dari pemasaran adalah perbaikan strukturalnya.
Resend adalah pilihan yang berorientasi developer jika Anda menginginkan API yang bersih dan permukaan kecil untuk diinstrumentasi. Layak dipertimbangkan saat tim Anda memang akan menulis sendiri cek deliverability.
SendGrid punya rekam jejak terpanjang di volume besar dan menawarkan IP khusus, artinya reputasi serta paparan blocklist sepenuhnya menjadi milik Anda. Lewati opsi ini jika Anda tidak bisa menyediakan staf untuk warmup dan monitoring yang dibutuhkan IP khusus.
Better Stack adalah bagian untuk sisi job terjadwal: pengecekan bergaya uptime, alerting, dan routing on-call untuk skrip lookup di atas, sehingga listing baru sampai ke manusia, bukan hanya ke file log.
Ketika Anda tercantum, perbaiki penyebabnya sebelum meminta penghapusan
Menghapus tanpa mencari akar masalah hanya membeli beberapa hari. Operator daftar yang melihat alamat yang sama kembali dengan perilaku yang sama akan mencantumkannya lagi, dan sebagian operator memperberat listing yang berulang.
Kerjakan dengan urutan ini:
Hentikan atau turunkan kecepatan pengiriman dari IP yang tercantum. Lalu lintas buruk yang terus berjalan akan memperpanjang listing dan menambah listing baru.
Baca catatan listing dari operator daftar. Banyak yang mencantumkan buktinya: hit spam trap, lonjakan, atau laporan penyalahgunaan relay.
Cari sumbernya. Periksa endpoint formulir untuk penyalahgunaan open relay, lihat impor daftar terbaru, dan tinjau integrasi baru yang mulai mengirim dalam seminggu terakhir.
Perbaiki penyebabnya, lalu gunakan proses penghapusan milik operator. Beberapa daftar menghapus listing secara otomatis setelah periode tenang.
Lanjutkan dengan volume yang dikurangi, mulai dari penerima yang paling aktif, dan pantau tingkat keluhan serta deferral selama seminggu.
Reverse DNS yang hilang adalah kontributor yang berulang. Google mencantumkan rekord PTR yang valid dalam persyaratan pengirimnya, dan IP pengirim tanpa PTR dibaca sebagai kepercayaan rendah oleh banyak penerima bahkan sebelum konten dievaluasi.
Bangun alur lifecycle di sekitar sinyal, bukan daftar
Jika produk Anda mengirim email aktivasi, tagihan, atau keamanan, listing adalah insiden ketersediaan untuk alur tersebut. Perlakukan begitu: jalurkan email transaksional lewat jalur yang terisolasi dari volume pemasaran, dan buat lapisan trigger sadar akan status pengiriman, sehingga email aktivasi yang macet kembali ke prompt di dalam aplikasi.
Customer.io adalah lapisan berbasis event yang biasanya dipasangkan dengan penyedia pengiriman terpisah untuk alasan ini: trigger perilaku dan logika pesan berada di satu tempat, pengiriman di tempat lain, dan Anda bisa mengganti atau memisahkan pengiriman tanpa menulis ulang alur. Konsekuensinya adalah satu sistem lagi yang harus tetap bisa diamati.
Bagian pemisahan inilah yang layak ditiru meskipun Anda memilih vendor yang berbeda. Event daftar hitam seharusnya mengubah ke mana sebuah pesan dikirim, bukan apakah logika lifecycle Anda masih berfungsi.
Yang sebaiknya Anda pasang minggu ini
Ada tiga hal, diurutkan dari manfaat terbesar. Pertama, lookup terjadwal dengan validasi zona dan status refused yang terpisah, dijalankan dari host yang memiliki resolver sendiri. Kedua, rincian bounce per domain penerima, agar Anda tahu daftar mana yang penting untuk trafik Anda. Ketiga, runbook tertulis yang dimulai dari teks bounce dan diakhiri dengan langkah penghapusan, supaya siapa pun yang sedang on-call tidak perlu berimprovisasi.
Domain pengirim mana yang tidak akan Anda sadari jika tercantum selama sehari?