Cek SPF Record — Validasi Record SPF Domain
Cek SPF domain mana pun seperti server email penerima: setiap include beserta biaya lookup DNS-nya, total berjalan terhadap batas 10, void lookup, dan hasil untuk IP pengirim mana pun, lengkap dengan term yang menentukannya.
Persis nama yang Anda ketik: SPF tidak diwariskan, jadi mail.example.com butuh record sendiri.
Apa itu record SPF?
Record SPF adalah record TXT yang mencantumkan server yang boleh mengirim email atas nama sebuah domain. Diawali v=spf1, lalu menyebut pengirim term demi term, dan ditutup dengan sikap penerima terhadap semua pengirim lainnya (RFC 7208, April 2014, masih standar saat ini).
Penerima mengeceknya terhadap alamat server yang terhubung dan domain di envelope sender, yaitu MAIL FROM atau Return-Path, bukan baris From: yang dilihat pembaca. Mengaitkan SPF dengan From: adalah tugas DMARC.
Sebuah record hanya berlaku untuk nama persis tempatnya dipublikasikan: SPF tidak diwariskan, jadi mail.example.com butuh record sendiri. Domain yang tidak mengirim email sebaiknya memublikasikan v=spf1 -all.
Include menunjuk ke _spf.google.com · 8 rentang, tanpa lookup lanjutan
ip4:74.125.0.0/16ip4:209.85.128.0/17ip6:2001:4860:4864::/56ip6:2404:6800:4864::/56ip6:2607:f8b0:4864::/56ip6:2800:3f0:4864::/56ip6:2a00:1450:4864::/56ip6:2c0f:fb50:4864::/56~all
v=spf1, di paling depan: record yang diawali dengan cara lain bukan record SPF.redirect= menyerahkan pengecekan ke record lain; exp= menjelaskan sebuah fail.~all. Direkam lewat Google Public DNS pada 24 Oktober 2026.Cara cek SPF record
Ketik domain di atas dan pengecek ini membaca record TXT-nya, memilih yang diawali v=spf1, lalu mengikuti setiap include dan redirect seperti yang dilakukan server penerima, sambil menghitung setiap lookup DNS.
Secara manual, minta record TXT-nya: dig TXT example.com +short atau nslookup -type=TXT example.com. Jawabannya berisi setiap record TXT di nama itu; record SPF adalah yang diawali v=spf1, dan yang panjang datang sebagai beberapa string berkutip yang digabung SPF tanpa spasi. Setiap include adalah satu query lagi, dan Anda harus menghitungnya sendiri.
Untuk melihat apakah server tertentu boleh mengirim, beralih ke Uji IP: pengecekan yang sama dijalankan untuk alamat itu dan menampilkan term yang cocok.
dig TXT example.com +shortSetiap record TXT di nama itu, seperti yang dimiliki resolver Anda; record SPF adalah yang diawali v=spf1. Jalankan lagi untuk setiap include.
$ dig TXT github.com @dns1.p08.nsone.net +norec +noall +answer github.com. 300 IN TXT "v=spf1 ip4:192.30.252.0/22 include:spf.protection.outlook.com include:_netblocks.google.com include:_netblocks2.google.com include:mail.zendesk.com include:_spf.salesforce.com include:servers.mcsv.net include:mktomail.com include:sendgrid.net ip4:62.253.2" "27.114 ip4:166.78.69.169 ip4:166.78.69.170 ip4:166.78.71.131 ~all" # lalu setiap include, satu query per kali: $ dig +short TXT _spf.salesforce.com "v=spf1 exists:%{i}._spf.mta.salesforce.com -all"
- Satu record diawali v=spf1. 23 record TXT lain di sampingnya (token verifikasi dan sejenisnya) tidak memengaruhi SPF, kecuali ukuran jawabannya.
- 2 string, digabung tanpa spasi. Pemecahan 255 byte jatuh di dalam
ip4:62.253.227.114: penerima menggabungkan kembali string-nya, jadi tidak masalah. - TTL 5 menit. Berapa lama resolver boleh menyimpan salinan ini setelah perubahan. Server milik zona sendiri menyebut 5 menit; resolver menampilkan sisa waktu salinannya.
- Setiap include adalah query tersendiri. Mengikuti record github.com butuh 10 lookup, termasuk yang bersarang. dig menampilkan satu nama per kali: menghitung hingga 10 adalah tugas Anda.
$ nslookup -type=TXT github.com 8.8.8.8
# setiap record TXT di nama itu, dari Google Public DNS PS> Resolve-DnsName -Name github.com -Type TXT -Server 8.8.8.8
Membaca hasilnya: pohon include
Kesimpulan menyebut apa yang didapat penerima untuk pengirim yang tidak tercantum di record: valid beserta akhirannya (softfail untuk ~all, fail untuk -all), atau permerror beserta penyebabnya, atau "tidak bisa dicek" jika DNS tidak menjawab.
Kolom biru tua adalah anggaran lookup: satu sel per lookup DNS, diwarnai menurut include yang memakainya, total berjalan terhadap 10, dan void lookup sebagai cincin. Setelah lookup ke-10, sel berubah merah dan cabang tempat penerima berhenti ditandai.
Tampilan Pohon mendaftar bacaan, yang gagal lebih dulu, masing-masing dengan bagian RFC dan cara memperbaikinya, lalu setiap lookup sesuai urutan penerima bertanya.

KesimpulanApa yang didapat penerima untuk pengirim yang tidak tercantum di record, dan akhiran yang menentukannya.Record, term demi termSetiap term diwarnai menurut jenisnya; include membawa tanda pemiliknya dan biaya lookup-nya sendiri.BacaanSatu record, sintaks valid, lookup, void, akhiran, ptr, DMARC: yang gagal lebih dulu, masing-masing dengan cara memperbaikinya.Anggaran lookupSetiap lookup DNS sebagai sel, diwarnai menurut include yang memakainya, terhadap batas 10.Biaya setiap includeSatu cabang per include: sel miliknya sendiri, yang disarangkannya, dan total berjalan.Void lookupCincin untuk query yang kembali kosong; yang ketiga mengakhiri pengecekan.Batas 10 lookup dan "too many DNS lookups" (permerror)
Penerima menghitung setiap term yang butuh query DNS, yaitu include, a, mx, ptr, exists, dan redirect, melalui setiap include bersarang, dan berhenti di 10. Yang ke-11 menghasilkan permerror (RFC 7208 §4.6.4). ip4, ip6, all, dan exp tidak memakai biaya.
Ini permerror, bukan fail: apa yang dilakukan penerima terhadapnya adalah keputusannya sendiri, tetapi di bawah DMARC permerror tidak pernah dihitung sebagai pass. Dan karena pengecekan berhenti di kecocokan pertama, record yang melewati batas tetap pass untuk pengirim yang tercantum di awal dan hanya rusak untuk yang tercantum belakangan.
Biayanya tersembunyi di dalam include: include:_netblocks.mimecast.com memakai 9 sendirian, Yandex 360 memakai 8, Freshdesk 7, Mailgun 5. Include Google dan Microsoft 365 masing-masing memakai 1. Untuk turun di bawah 10, hapus pengirim yang tidak lagi dipakai dan pindahkan pengirim massal ke subdomain dengan record sendiri.
v=spf1 include:spf.protection.outlook.com include:_netblocks.mimecast.com include:mailgun.org include:sendgrid.net -all
Semua yang lain juga mendapat permerror, bukan fail dari -all di record: penerima berhenti sebelum mencapainya.
- _netblocks.mimecast.comMimecast9 lookup
- _spf.yandex.netYandex 3608 lookup
- email.freshdesk.comFreshdesk7 lookup
- mailgun.orgMailgun5 lookup
- icloud.comiCloud+5 lookup
- spf.titan.emailTitan Email4 lookup
- secureserver.netGoDaddy3 lookup
- _spf.google.comGoogle Workspace1 lookup
- spf.protection.outlook.comMicrosoft 3651 lookup
Apa itu void lookup?
Void lookup adalah query yang kembali tanpa record: namanya tidak ada (NXDOMAIN) atau ada tanpa record yang diminta. Penerima sebaiknya mengizinkan dua; yang ketiga adalah permerror (RFC 7208 §4.6.4).
Term yang menunjuk ke host yang sudah hilang, a:old.example.com, bukan error dengan sendirinya: hanya tidak cocok dan dihitung satu void. Begitu juga exists:%{i}._spf.mta.salesforce.com untuk setiap pengirim yang tidak dicantumkan Salesforce, itulah sebabnya urutan include penting.
Kegagalan server atau timeout bukan void: itu temperror, dan penerima biasanya mencoba lagi nanti.
Record salesforce.com sendiri untuk 192.0.2.1, direkam 24 Oktober 2026
v=spf1 include:_spf.google.com include:_spf.salesforce.com exists:%{i}._spf.corp.salesforce.com ~all
exists:%{i}._spf.mta.salesforce.com192.0.2.1._spf.mta.salesforce.com → NXDOMAIN · lookup ke-3 · di _spf.salesforce.comexists:%{i}._spf.corp.salesforce.com192.0.2.1._spf.corp.salesforce.com → NXDOMAIN · lookup ke-4 · di salesforce.com
Hasil: softfail, dengan kedua void yang diizinkan terpakai
a:mail.example.com untuk nama yang masih ada tetapi tidak lagi punya alamat: NOERROR tanpa jawaban. Tidak cocok, satu void, dan pengecekan berlanjut.NODATAlookup kosongexists:%{i}._spf.mta.salesforce.com membuat nama dari setiap IP pengirim; untuk alamat yang tidak dicantumkan Salesforce, jawabannya NXDOMAIN: satu void setiap kali.NXDOMAINlookup kosongmx:shop.example.com, nama yang sudah hilang, setelah 2 void terpakai: penerima berhenti di sini.NXDOMAINpermerrorinclude:_spf.vendor.example: DNS gagal, jadi tidak ada yang dihitung sebagai void.SERVFAILtemperror, bukan voidInclude include:spf.bmv.jp milik blastmail diawali dua term exists seperti itu: untuk alamat yang tidak dicantumkannya, kedua void yang diizinkan terpakai habis oleh include itu sendiri.
SPF flattening: kapan membantu dan kapan merusak
Flattening mengganti include dengan alamat yang dicantumkannya, sehingga record memakai lebih sedikit lookup. Cara ini cocok untuk rentang yang jarang berubah, dan berbalik merugikan jika penyedia menambah server yang tidak Anda salin: email dari server itu lalu gagal SPF.
Microsoft menyarankan untuk tidak flatten include:spf.protection.outlook.com, dan include Google dan Microsoft sudah memakai satu lookup masing-masing. Memindahkan pengirim massal ke subdomain seperti news.example.com memberinya record, dan 10 lookup, sendiri.
Sebelum
include:mailgun.org
- Lookup
- 5
- Record yang diambil
- 5
- Byte di record Anda
- 19
- Mailgun mengubah sebuah rentang
- langsung terambil
Sesudah
ip4:159.135.224.0/20 ip4:69.72.32.0/20 ip4:204.220.90.0/23 ip4:204.220.92.0/22 +18 lagi
- Lookup
- 0
- Byte di record Anda
- 450
- String TXT yang dibutuhkan
- 2
- Mailgun mengubah sebuah rentang
- salinan Anda usang
Risiko salinan usang. Anda menyalin 22 rentang hari ini; saat Mailgun menambah satu, email darinya gagal SPF sampai ada yang menyadari dan memperbarui record.
- disalin
- Mailgun menambah rentang
- email darinya gagal SPF
~all vs -all (dan DMARC)
Term terakhir menentukan apa yang terjadi pada setiap pengirim yang tidak tercantum. -all adalah fail, pernyataan terkuat; ~all adalah softfail, "mungkin bukan"; ?all adalah neutral, yang diperlakukan penerima seperti tanpa SPF sama sekali; +all membuat semua orang lolos dan tidak boleh dipublikasikan.
Antara ~all dan -all tidak ada jawaban yang salah. Google mendokumentasikan ~all untuk Google Workspace dan Microsoft -all untuk Microsoft 365. Dengan DMARC yang ditegakkan, ~all membiarkan DMARC memutuskan berdasarkan DKIM: sebagian penerima menolak karena -all sebelum DMARC melihat tanda tangan DKIM yang pass, sehingga email yang diteruskan bisa bounce (RFC 9989 §7.1).
~all-all?all?all: tidak berbahaya di sana, karena hanya pass di dalam include yang cocok.+all-all dengan DMARC di p=reject
- SPF: fail
- ditolak di SMTP
- DKIM tidak pernah dicek
Sebagian penerima bertindak berdasarkan SPF lebih dulu, jadi pesan yang diteruskan dengan tanda tangan DKIM valid bisa ditolak sebelum DMARC berjalan, dan kerugiannya tidak pernah muncul di laporan DMARC.
~all dengan DMARC di p=reject
- SPF: softfail
- DMARC mengecek DKIM
- DKIM yang aligned: pass
DMARC yang memutuskan. Tanpa tanda tangan DKIM, Microsoft menyebut DMARC praktis diabaikan untuk kegagalan ~all, dan karena itu merekomendasikan -all.
~all dan -all sama-sama pilihan valid; ?all tidak menyatakan apa pun, dan +all membuat siapa pun lolos.Kesalahan SPF yang umum dan cara memperbaikinya
Kebanyakan record yang rusak berasal dari tiga kekeliruan: record SPF kedua ditambahkan di samping yang pertama alih-alih digabung, include untuk vendor yang sudah tidak dipakai, dan nilai yang disalin dari dokumentasi dengan salah ketik.
Dokumentasi vendor sendiri mencetak sebagian dari ini: Mimecast menulis –all dengan en dash, Postmark include: spf.mtasv.net dengan spasi, Twilio SendGrid mencantumkan mekanisme aaaa yang tidak ada. Kesalahan sintaks apa pun membuat seluruh record permerror. Titik di akhir domain, sebaliknya, valid.
Dua record SPFpermerror
v=spf1 include:_spf.google.com ~allv=spf1 include:sendgrid.net ~allPerbaikan: gabungkan menjadi satu: satu v=spf1, setiap include sekali, satu akhiran.
Lebih dari 10 lookuppermerror
v=spf1 include:_netblocks.mimecast.com include:mailgun.org -all14 lookup
Perbaikan: hapus pengirim yang tidak lagi dipakai, atau beri pengirim massal subdomain sendiri.
Void lookup ketigapermerror
v=spf1 a:old.example.com mx:gone.example.net exists:%{i}.spf.example.org -all3 void
Perbaikan: hapus term yang namanya sudah hilang, dan letakkan include exists paling akhir.
Include tanpa record SPF di baliknyapermerror
v=spf1 include:spf.retired-vendor.example -allPerbaikan: perbaiki namanya, atau hapus vendor yang sudah Anda tinggalkan.
En dash di –allpermerror
v=spf1 include:_netblocks.mimecast.com –allDicetak seperti ini di dokumentasi Mimecast sendiri
Perbaikan: tanda hubung biasa: -all.
Spasi setelah include:permerror
v=spf1 a mx include: spf.mtasv.net ~allDicetak seperti ini di dokumentasi Postmark sendiri
Perbaikan: include:spf.mtasv.net
Mekanisme aaaapermerror
v=spf1 aaaa:example.com ~allDicetak seperti ini di dokumentasi Twilio SendGrid sendiri
Perbaikan: a:example.com; a sudah mencocokkan record AAAA untuk pengirim IPv6.
Titik di akhirsah
v=spf1 include:spf.protection.outlook.com. -allValid: RFC 7208 §7.3 menyarankan untuk tidak memublikasikannya, tetapi penerima wajib menerimanya.
Bantuan Zendesk juga menyebut “redirect: syntax is supported”: modifiernya ditulis redirect= (RFC 7208 §6.1).
Yang diwajibkan Gmail, Yahoo, dan Microsoft
Sejak Februari 2024 Gmail dan Yahoo mewajibkan setiap pengirim menyiapkan SPF atau DKIM. Pengirim massal butuh keduanya, record DMARC minimal p=none, dan domain From: yang aligned dengan salah satunya. Outlook.com meminta pengirim bervolume tinggi memiliki SPF dan DKIM sekaligus, dan menolak yang tidak memilikinya sejak 5 Mei 2025.
Ambang Gmail adalah lebih dari 5.000 pesan sehari ke akun pribadi; Yahoo tidak mempublikasikan ambang apa pun. SPF saja tidak pernah membuat email "aligned": domain MAIL FROM harus milik Anda, bukan domain bounce penyedia.
| Gmail | Yahoo | Outlook.com | |
|---|---|---|---|
| Ambang massal | Gmaillebih dari 5.000 pesan sehari ke akun Gmail pribadi, dihitung per domain utama | Yahootidak dipublikasikan: “We will not specify a volume threshold” | Outlook.comlebih dari 5.000 sehari (blog Microsoft); 5.000 atau lebih dari satu domain From: (artikel dukungannya) |
| Semua pengirim | GmailSPF atau DKIM, plus DNS forward dan reverse, TLS, dan tingkat spam di bawah 0,3% | YahooSPF atau DKIM, plus DNS forward dan reverse, dan tingkat spam di bawah 0,3% | Outlook.comtidak ada aturan keras |
| Pengirim massal | GmailSPF dan DKIM, DMARC (p=none sudah cukup), From: aligned dengan SPF atau DKIM, berhenti berlangganan satu klik untuk email pemasaran | YahooSPF dan DKIM, DMARC minimal p=none dan pass, From: aligned dengan SPF atau DKIM, berhenti berlangganan satu klik | Outlook.comSPF harus pass dan DKIM harus pass, DMARC minimal p=none, aligned dengan SPF atau DKIM |
| Berlaku sejak | Gmail1 Februari 2024; penolakan ditingkatkan sejak November 2025 | YahooFebruari 2024 | Outlook.com5 Mei 2025 (penolakan) |
| Kegagalan SPF tampil sebagai | Gmail4.7.275.7.27 | Yahootidak didokumentasikan untuk SPF | Outlook.com550 5.7.515 |
Jepang: pengaturan paling ketat NTT docomo, 「全て拒否する」, menolak email yang IP pengirimnya tidak diotorisasi record SPF domain, dan email dari domain yang sama sekali tidak memublikasikan record SPF. docomo.ne.jp
Sumbersupport.google.comsenders.yahooinc.comtechcommunity.microsoft.com
SPF lookup vs dig dan nslookup
dig dan nslookup menampilkan record TXT seperti yang dimiliki resolver Anda: record SPF dan apa pun yang ada di nama itu. Keduanya tidak mengikuti include, menghitung lookup atau void, atau menyebut apa yang akan diputuskan penerima.
SPF lookup seperti ini menelusuri seluruh record, jadi angkanya sama dengan yang dihitung server penerima. Pakai dig untuk satu nama, pengecek ini untuk kesimpulannya.
dig TXT | nslookup -type=TXT | ||
|---|---|---|---|
| Menampilkan record TXT | Pengecek iniYadipecah menjadi term | dig TXTYa | nslookup -type=TXTYa |
| Menggabung string record yang panjang | Pengecek iniYaseperti penerima | dig TXTTidakmenampilkan setiap string terpisah | nslookup -type=TXTTidakmenampilkan setiap string terpisah |
| Mengikuti setiap include | Pengecek iniYaseluruh pohon | dig TXTTidaksatu nama per query | nslookup -type=TXTTidaksatu nama per query |
| Menghitung lookup hingga 10 | Pengecek iniYatotal berjalan, per include | dig TXTTidakmanual | nslookup -type=TXTTidakmanual |
| Menghitung void lookup | Pengecek iniYabeserta namanya | dig TXTTidak | nslookup -type=TXTTidak |
| Menyebut dua record = permerror | Pengecek iniYa | dig TXTTidakmencetak keduanya | nslookup -type=TXTTidakmencetak keduanya |
| Menguji IP pengirim | Pengecek iniYacheck_host dan term yang cocok | dig TXTTidak | nslookup -type=TXTTidak |
| Bertanya ke resolver Anda sendiri | Pengecek iniTidakGoogle Public DNS, dari server kami | dig TXTYa | nslookup -type=TXTYa |
Cek SPF: pertanyaan yang sering diajukan
Apa itu cek record SPF?
Bagaimana cara menguji apakah sebuah alamat IP boleh mengirim email untuk domain saya?
Apa arti "SPF too many DNS lookups"?
Apa itu permerror SPF?
Apa itu void lookup di SPF?
Haruskah record SPF saya diakhiri ~all atau -all?
Bolehkah sebuah domain punya dua record SPF?
Apa itu SPF flattening, dan haruskah saya memakainya?
Apakah subdomain butuh record SPF sendiri?
Mengapa SPF pass di sini tetapi fail di Gmail?
Apa perbedaan SPF, DKIM, dan DMARC?
Berapa lama perubahan record SPF mulai berlaku?
Ada yang kurang?Usulkan fitur atau alat baru
Tool email dan DNS terkait
Pencarian MX
Temukan rekaman mail exchange dan detail server email
Cek DMARC
Periksa kebijakan DMARC dan pengaturan alignment untuk domain apa pun
Cek DKIM
Verifikasi rekaman DKIM dengan deteksi selektor otomatis
Analisis Header Email
Parsing header email mentah dan lacak perjalanan email
Pemeriksaan Daftar Hitam IP
Periksa apakah alamat IP terdaftar di daftar hitam spam atau malware
Pencarian DNS Terbalik
Temukan hostname terkait alamat IP melalui rekaman PTR
Cek DNS
Semua DNS record langsung dari nameserver domain, berdampingan dengan cache Google dan Cloudflare
SPF Record Generator
Buat SPF record TXT yang valid untuk penyedia email dan server Anda, dengan cek langsung batas 10 DNS lookup
