Kiểm Tra SPF — Xác Minh Bản Ghi SPF Online
Check SPF cho bất kỳ tên miền nào giống cách máy chủ thư nhận làm: mỗi include với chi phí tra cứu DNS riêng, tổng đang chạy so với giới hạn 10, các lượt tra cứu rỗng, và kết quả cho mọi IP gửi, kèm term đã quyết định nó.
Đúng tên bạn nhập: SPF không có kế thừa, nên mail.example.com cần bản ghi riêng.
Bản ghi SPF là gì?
Bản ghi SPF là một bản ghi TXT liệt kê các máy chủ được phép gửi thư cho một tên miền. Nó bắt đầu bằng v=spf1, rồi nêu từng máy chủ gửi theo từng term, và kết thúc bằng điều máy chủ nhận nên làm với mọi máy chủ còn lại (RFC 7208, tháng 4 năm 2014, vẫn là chuẩn hiện hành).
Máy chủ nhận đối chiếu nó với địa chỉ của máy chủ đang kết nối và tên miền của người gửi trong phong bì, tức MAIL FROM hay Return-Path, không phải dòng From: mà người đọc nhìn thấy. Gắn SPF với From: là việc của DMARC.
Một bản ghi chỉ áp dụng cho đúng tên mà nó nằm tại đó: SPF không có kế thừa, nên mail.example.com cần bản ghi riêng. Tên miền không gửi thư nên công bố v=spf1 -all.
Include trỏ tới _spf.google.com · 8 dải, không tra cứu thêm
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, đứng đầu: bản ghi bắt đầu theo cách khác không phải bản ghi SPF.redirect= giao lần kiểm tra cho một bản ghi khác; exp= giải thích một fail.~all. Ghi lại qua Google Public DNS ngày 24 tháng 10, 2026.Cách kiểm tra bản ghi SPF
Hãy nhập một tên miền ở trên, công cụ sẽ đọc các bản ghi TXT của nó, chọn bản ghi bắt đầu bằng v=spf1, rồi lần theo mọi include và redirect như một máy chủ nhận, đếm từng lượt tra cứu DNS trên đường đi.
Làm thủ công thì hãy hỏi các bản ghi TXT: dig TXT example.com +short hoặc nslookup -type=TXT example.com. Câu trả lời gồm mọi bản ghi TXT tại tên đó; bản ghi SPF là bản ghi bắt đầu bằng v=spf1, và một bản ghi dài sẽ đến dưới dạng nhiều chuỗi trong dấu ngoặc kép mà SPF nối lại không thêm dấu cách. Mỗi include là thêm một truy vấn, và bạn phải tự đếm chúng.
Để biết một máy chủ cụ thể có được gửi thư hay không, hãy chuyển sang Thử một IP: chế độ này chạy cùng lần kiểm tra cho địa chỉ đó và cho thấy term đã khớp.
dig TXT example.com +shortMọi bản ghi TXT tại tên đó, như bộ phân giải của bạn đang có; bản ghi SPF là bản ghi bắt đầu bằng v=spf1. Hãy chạy lại cho từng 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" # rồi từng include, mỗi lần một truy vấn: $ dig +short TXT _spf.salesforce.com "v=spf1 exists:%{i}._spf.mta.salesforce.com -all"
- Một bản ghi bắt đầu bằng v=spf1. 23 bản ghi TXT khác bên cạnh (mã xác minh và những thứ tương tự) không ảnh hưởng tới SPF, trừ kích thước của câu trả lời.
- 2 chuỗi, nối lại không có dấu cách. Chỗ tách ở 255 byte nằm bên trong
ip4:62.253.227.114: máy chủ nhận nối các chuỗi lại, nên không sao. - TTL 5 phút. Bộ phân giải được giữ bản sao này bao lâu sau khi có thay đổi. Máy chủ của chính vùng nói 5 phút; bộ phân giải hiện phần còn lại của bản sao của nó.
- Mỗi include là một truy vấn riêng. Lần theo bản ghi của github.com tốn 10 lượt tra cứu, kể cả các include lồng nhau. dig chỉ cho thấy một tên mỗi lần: con số tới 10 là do bạn tự cộng.
$ nslookup -type=TXT github.com 8.8.8.8
# mọi bản ghi TXT tại tên đó, từ Google Public DNS PS> Resolve-DnsName -Name github.com -Type TXT -Server 8.8.8.8
Đọc kết quả: cây include
Kết luận cho biết máy chủ nhận nhận được gì với một máy chủ gửi mà bản ghi không liệt kê: hợp lệ kèm phần kết (softfail với ~all, fail với -all), hoặc một permerror kèm nguyên nhân, hoặc "không kiểm tra được" khi DNS không trả lời.
Cột màu xanh đậm là hạn mức tra cứu: mỗi lượt tra cứu DNS là một ô, tô màu theo include đã dùng nó, tổng đang chạy so với 10, và các lượt tra cứu rỗng là các vòng tròn. Quá lượt thứ 10, các ô chuyển sang đỏ và nhánh nơi máy chủ nhận dừng được đánh dấu.
Chế độ Cây liệt kê các nhận định, lỗi trước, mỗi nhận định kèm mục RFC và cách sửa, rồi mọi lượt tra cứu theo thứ tự máy chủ nhận hỏi.

Kết luậnĐiều máy chủ nhận nhận được với một máy chủ gửi mà bản ghi không liệt kê, và phần kết quyết định điều đó.Bản ghi, từng term mộtMỗi term được tô màu theo loại; một include mang dấu hiệu của chủ nó và chi phí tra cứu riêng.Các nhận địnhMột bản ghi, cú pháp hợp lệ, lượt tra cứu, lượt rỗng, phần kết, ptr, DMARC: lỗi trước, mỗi nhận định kèm cách sửa.Hạn mức tra cứuMỗi lượt tra cứu DNS là một ô, tô màu theo include đã dùng nó, so với giới hạn 10.Chi phí của từng includeMột nhánh cho mỗi include: các ô riêng của nó, những gì nó lồng vào và tổng đang chạy.Các lượt tra cứu rỗngVòng tròn cho những truy vấn trả về rỗng; lượt thứ ba kết thúc lần kiểm tra.Giới hạn 10 lượt tra cứu và lỗi "too many DNS lookups" (permerror)
Máy chủ nhận đếm mọi term cần một truy vấn DNS, gồm include, a, mx, ptr, exists và redirect, qua mọi include lồng nhau, và dừng ở 10. Lượt thứ 11 cho permerror (RFC 7208 §4.6.4). ip4, ip6, all và exp không tốn gì.
Đó là permerror, không phải fail: máy chủ nhận làm gì với nó là quyết định của riêng họ, nhưng với DMARC thì permerror không bao giờ được tính là pass. Và vì lần kiểm tra dừng ở lần khớp đầu tiên, một bản ghi vượt giới hạn vẫn pass với các máy chủ gửi được liệt kê sớm và chỉ hỏng với những máy chủ gửi được liệt kê muộn.
Chi phí ẩn trong các include: include:_netblocks.mimecast.com tự nó tốn 9, Yandex 360 tốn 8, Freshdesk 7, Mailgun 5. Include của Google và Microsoft 365 mỗi cái tốn 1. Để xuống dưới 10, hãy bỏ các máy chủ gửi bạn không còn dùng và chuyển máy chủ gửi hàng loạt sang một tên miền phụ có bản ghi riêng.
v=spf1 include:spf.protection.outlook.com include:_netblocks.mimecast.com include:mailgun.org include:sendgrid.net -all
Mọi máy chủ gửi khác cũng nhận permerror, không phải fail của -all trong bản ghi: máy chủ nhận dừng trước khi tới đó.
- _netblocks.mimecast.comMimecast9 lượt tra cứu
- _spf.yandex.netYandex 3608 lượt tra cứu
- email.freshdesk.comFreshdesk7 lượt tra cứu
- mailgun.orgMailgun5 lượt tra cứu
- icloud.comiCloud+5 lượt tra cứu
- spf.titan.emailTitan Email4 lượt tra cứu
- secureserver.netGoDaddy3 lượt tra cứu
- _spf.google.comGoogle Workspace1 lượt tra cứu
- spf.protection.outlook.comMicrosoft 3651 lượt tra cứu
Lượt tra cứu rỗng (void lookup) là gì?
Lượt tra cứu rỗng là một truy vấn trả về không có bản ghi nào: tên không tồn tại (NXDOMAIN) hoặc tồn tại nhưng không có loại bản ghi được hỏi. Máy chủ nhận nên cho phép hai lượt; lượt thứ ba là permerror (RFC 7208 §4.6.4).
Một term trỏ tới host đã mất, a:old.example.com, tự nó không phải lỗi: nó chỉ không khớp và tính một lượt rỗng. exists:%{i}._spf.mta.salesforce.com cũng vậy với mọi máy chủ gửi mà Salesforce không liệt kê, vì thế thứ tự của các include rất quan trọng.
Lỗi máy chủ hay hết thời gian chờ không phải lượt rỗng: đó là temperror, và máy chủ nhận thường thử lại sau.
Bản ghi riêng của salesforce.com với 192.0.2.1, ghi lại ngày 24 tháng 10, 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 · lượt tra cứu 3 · trong _spf.salesforce.comexists:%{i}._spf.corp.salesforce.com192.0.2.1._spf.corp.salesforce.com → NXDOMAIN · lượt tra cứu 4 · trong salesforce.com
Kết quả: softfail, với cả hai lượt rỗng được phép đã dùng hết
a:mail.example.com cho một tên vẫn còn nhưng không còn địa chỉ: NOERROR không có trả lời. Không khớp, một lượt rỗng, và lần kiểm tra vẫn tiếp tục.NODATArỗngexists:%{i}._spf.mta.salesforce.com dựng một tên từ mỗi IP gửi; với một địa chỉ mà Salesforce không liệt kê, câu trả lời là NXDOMAIN: mỗi lần một lượt rỗng.NXDOMAINrỗngmx:shop.example.com, một tên đã mất, sau khi đã có 2 lượt rỗng: máy chủ nhận dừng ở đây.NXDOMAINpermerrorinclude:_spf.vendor.example: DNS bị lỗi, nên không có gì được tính là rỗng.SERVFAILtemperror, không phải lượt rỗngInclude include:spf.bmv.jp của blastmail bắt đầu bằng hai term exists như vậy: với một địa chỉ mà nó không liệt kê, riêng nó đã dùng hết cả hai lượt rỗng được phép.
Làm phẳng SPF (flattening): khi nào hữu ích, khi nào gây lỗi
Làm phẳng là thay một include bằng các địa chỉ mà nó liệt kê, để bản ghi tốn ít lượt tra cứu hơn. Cách này hiệu quả với những dải hiếm khi đổi, và phản tác dụng khi nhà cung cấp thêm một máy chủ mà bạn chưa sao chép: thư từ máy chủ đó sẽ fail SPF.
Microsoft nói không nên làm phẳng include:spf.protection.outlook.com, và include của Google lẫn Microsoft vốn đã chỉ tốn một lượt mỗi cái. Chuyển một máy chủ gửi hàng loạt sang tên miền phụ như news.example.com cho nó một bản ghi, và 10 lượt tra cứu, của riêng nó.
Trước
include:mailgun.org
- Lượt tra cứu
- 5
- Bản ghi đã lấy
- 5
- Byte trong bản ghi của bạn
- 19
- Mailgun đổi một dải
- được cập nhật ngay
Sau
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 nữa
- Lượt tra cứu
- 0
- Byte trong bản ghi của bạn
- 450
- Số chuỗi TXT cần có
- 2
- Mailgun đổi một dải
- bản sao của bạn đã cũ
Rủi ro của bản sao cũ. Hôm nay bạn sao chép 22 dải; khi Mailgun thêm một dải, thư từ dải đó fail SPF cho tới khi có người nhận ra và cập nhật bản ghi.
- đã sao chép
- Mailgun thêm một dải
- thư từ dải đó fail SPF
~all so với -all (và DMARC)
Term cuối cùng nói điều gì xảy ra với mọi máy chủ gửi không được liệt kê. -all là fail, tuyên bố mạnh nhất; ~all là softfail, "có lẽ không"; ?all là neutral, mà máy chủ nhận coi như không có SPF; +all cho mọi người pass và không bao giờ nên công bố.
Giữa ~all và -all không có đáp án sai. Google ghi nhận ~all cho Google Workspace và Microsoft ghi nhận -all cho Microsoft 365. Khi DMARC ở mức thực thi, ~all để DMARC quyết định dựa trên DKIM: một số máy chủ nhận từ chối ngay vì -all trước khi DMARC thấy chữ ký DKIM hợp lệ, nên thư được chuyển tiếp có thể bị trả lại (RFC 9989 §7.1).
~all-all?all?all: ở đó vô hại, vì chỉ một pass bên trong include mới khớp.+all-all với DMARC ở p=reject
- SPF ra fail
- bị từ chối trong SMTP
- DKIM không bao giờ được kiểm tra
Một số máy chủ nhận xử lý SPF trước, nên một thư được chuyển tiếp có chữ ký DKIM hợp lệ có thể bị từ chối trước khi DMARC chạy, và thiệt hại đó không bao giờ hiện trong báo cáo DMARC.
~all với DMARC ở p=reject
- SPF ra softfail
- DMARC kiểm tra DKIM
- DKIM căn chỉnh: pass
DMARC quyết định. Tuy nhiên, nếu không có chữ ký DKIM, Microsoft nói DMARC thực tế bị bỏ qua với các lỗi ~all, và vì lý do đó khuyên dùng -all.
~all lẫn -all đều là lựa chọn hợp lệ; ?all không nói gì, và +all cho bất kỳ ai cũng pass.Các lỗi SPF thường gặp và cách sửa
Phần lớn bản ghi hỏng đến từ ba sơ suất: thêm bản ghi SPF thứ hai bên cạnh bản ghi đầu thay vì gộp chúng, một include cho nhà cung cấp đã không còn, và một giá trị sao chép từ tài liệu có lỗi gõ.
Tài liệu của nhà cung cấp tự in ra một số lỗi này: Mimecast viết –all với gạch ngang en, Postmark viết include: spf.mtasv.net có dấu cách, Twilio SendGrid liệt kê một mechanism aaaa không hề tồn tại. Bất kỳ lỗi cú pháp nào cũng khiến cả bản ghi thành permerror. Ngược lại, dấu chấm cuối sau tên miền là hợp lệ.
Hai bản ghi SPFpermerror
v=spf1 include:_spf.google.com ~allv=spf1 include:sendgrid.net ~allCách sửa: gộp thành một: một v=spf1, mỗi include một lần, một phần kết.
Hơn 10 lượt tra cứupermerror
v=spf1 include:_netblocks.mimecast.com include:mailgun.org -all14 lượt tra cứu
Cách sửa: bỏ các máy chủ gửi bạn không còn dùng, hoặc cho máy chủ gửi hàng loạt một tên miền phụ riêng.
Lượt tra cứu rỗng thứ bapermerror
v=spf1 a:old.example.com mx:gone.example.net exists:%{i}.spf.example.org -all3 lượt rỗng
Cách sửa: xóa các term có tên đã mất, và đặt các include exists ở cuối.
Một include không có bản ghi SPF phía saupermerror
v=spf1 include:spf.retired-vendor.example -allCách sửa: sửa lại tên, hoặc gỡ nhà cung cấp bạn đã bỏ.
Gạch ngang en trong –allpermerror
v=spf1 include:_netblocks.mimecast.com –allIn đúng như vậy trong tài liệu của chính Mimecast
Cách sửa: dùng dấu gạch nối thường: -all.
Dấu cách sau include:permerror
v=spf1 a mx include: spf.mtasv.net ~allIn đúng như vậy trong tài liệu của chính Postmark
Cách sửa: include:spf.mtasv.net
Một mechanism aaaapermerror
v=spf1 aaaa:example.com ~allIn đúng như vậy trong tài liệu của chính Twilio SendGrid
Cách sửa: a:example.com; a đã khớp bản ghi AAAA của các máy chủ gửi dùng IPv6.
Dấu chấm cuốihợp lệ
v=spf1 include:spf.protection.outlook.com. -allHợp lệ: RFC 7208 §7.3 nói không nên công bố nó, nhưng máy chủ nhận phải chấp nhận.
Trang trợ giúp của Zendesk cũng nói “redirect: syntax is supported”: modifier được viết là redirect= (RFC 7208 §6.1).
Gmail, Yahoo và Microsoft yêu cầu gì
Từ tháng 2 năm 2024, Gmail và Yahoo yêu cầu mọi bên gửi phải thiết lập SPF hoặc DKIM. Bên gửi số lượng lớn cần cả hai, một bản ghi DMARC ít nhất p=none, và tên miền From: căn chỉnh với một trong hai. Outlook.com yêu cầu bên gửi số lượng lớn có cả SPF lẫn DKIM, và đã từ chối thư của những bên thiếu chúng từ ngày 5 tháng 5 năm 2025.
Ngưỡng của Gmail là hơn 5.000 thư mỗi ngày tới tài khoản cá nhân; Yahoo không công bố ngưỡng nào. Riêng SPF không bao giờ khiến thư "căn chỉnh": tên miền MAIL FROM phải là của bạn, không phải tên miền bounce của nhà cung cấp.
| Gmail | Yahoo | Outlook.com | |
|---|---|---|---|
| Ngưỡng số lượng lớn | Gmailhơn 5.000 thư mỗi ngày tới tài khoản Gmail cá nhân, tính theo tên miền chính | Yahookhông công bố: “We will not specify a volume threshold” | Outlook.comhơn 5.000 thư mỗi ngày (blog của Microsoft); 5.000 thư trở lên từ một tên miền From: (bài hỗ trợ của họ) |
| Mọi bên gửi | GmailSPF hoặc DKIM, cộng DNS xuôi và ngược, TLS và tỷ lệ spam dưới 0,3% | YahooSPF hoặc DKIM, cộng DNS xuôi và ngược và tỷ lệ spam dưới 0,3% | Outlook.comkhông có quy tắc cứng |
| Bên gửi số lượng lớn | GmailSPF và DKIM, DMARC (p=none là đủ), From: căn chỉnh với SPF hoặc DKIM, hủy đăng ký một cú nhấp cho thư tiếp thị | YahooSPF và DKIM, DMARC ít nhất p=none và pass, From: căn chỉnh với SPF hoặc DKIM, hủy đăng ký một cú nhấp | Outlook.comSPF phải pass và DKIM phải pass, DMARC ít nhất p=none, căn chỉnh với SPF hoặc DKIM |
| Có hiệu lực từ | Gmail1 tháng 2, 2024; việc từ chối thư tăng dần từ tháng 11 năm 2025 | Yahootháng 2 năm 2024 | Outlook.com5 tháng 5, 2025 (từ chối thư) |
| Lỗi SPF hiện ra là | Gmail4.7.275.7.27 | Yahookhông có trong tài liệu cho SPF | Outlook.com550 5.7.515 |
Nhật Bản: thiết lập nghiêm ngặt nhất của NTT docomo, 「全て拒否する」, từ chối thư có IP gửi mà bản ghi SPF của tên miền không cho phép, và thư từ những tên miền hoàn toàn không công bố bản ghi SPF. docomo.ne.jp
Nguồnsupport.google.comsenders.yahooinc.comtechcommunity.microsoft.com
Tra cứu SPF so với dig và nslookup
dig và nslookup cho thấy các bản ghi TXT như bộ phân giải của bạn đang có: bản ghi SPF và mọi thứ khác nằm tại tên đó. Chúng không lần theo include, không đếm lượt tra cứu hay lượt rỗng, và không cho biết một máy chủ nhận sẽ quyết định ra sao.
Một công cụ tra cứu SPF như công cụ này đi qua toàn bộ bản ghi, nên các con số khớp với những gì một máy chủ nhận tính ra. Hãy dùng dig cho một tên, và công cụ kiểm tra này để có kết luận.
dig TXT | nslookup -type=TXT | ||
|---|---|---|---|
| Hiển thị các bản ghi TXT | Công cụ nàyCótách thành từng term | dig TXTCó | nslookup -type=TXTCó |
| Nối các chuỗi của một bản ghi dài | Công cụ nàyCónhư máy chủ nhận làm | dig TXTKhônghiện từng chuỗi riêng | nslookup -type=TXTKhônghiện từng chuỗi riêng |
| Lần theo mọi include | Công cụ nàyCótoàn bộ cây | dig TXTKhôngmỗi truy vấn một tên | nslookup -type=TXTKhôngmỗi truy vấn một tên |
| Đếm lượt tra cứu tới 10 | Công cụ nàyCótổng đang chạy, theo từng include | dig TXTKhônglàm thủ công | nslookup -type=TXTKhônglàm thủ công |
| Đếm lượt tra cứu rỗng | Công cụ nàyCókèm tên | dig TXTKhông | nslookup -type=TXTKhông |
| Cho biết hai bản ghi = permerror | Công cụ nàyCó | dig TXTKhôngin cả hai | nslookup -type=TXTKhôngin cả hai |
| Thử một IP gửi | Công cụ nàyCócheck_host và term khớp | dig TXTKhông | nslookup -type=TXTKhông |
| Hỏi bộ phân giải của riêng bạn | Công cụ nàyKhôngGoogle Public DNS, từ máy chủ của chúng tôi | dig TXTCó | nslookup -type=TXTCó |
Kiểm tra SPF: câu hỏi thường gặp
Kiểm tra bản ghi SPF là gì?
Làm sao kiểm tra một địa chỉ IP có được phép gửi email cho tên miền của tôi không?
"SPF too many DNS lookups" nghĩa là gì?
SPF permerror là gì?
Lượt tra cứu rỗng (void lookup) trong SPF là gì?
Bản ghi SPF của tôi nên kết thúc bằng ~all hay -all?
Một tên miền có thể có hai bản ghi SPF không?
Làm phẳng SPF (flattening) là gì, và tôi có nên dùng không?
Tên miền phụ có cần bản ghi SPF riêng không?
Vì sao SPF pass ở đây nhưng lại fail ở Gmail?
SPF, DKIM và DMARC khác nhau thế nào?
Thay đổi bản ghi SPF mất bao lâu để có hiệu lực?
Công cụ email và DNS liên quan
Tra Cứu MX
Tìm bản ghi trao đổi thư và chi tiết máy chủ thư
Kiểm Tra DMARC
Kiểm tra chính sách DMARC và cài đặt căn chỉnh cho bất kỳ tên miền nào
Kiểm Tra DKIM
Xác minh bản ghi DKIM với tự động phát hiện selector
Phân Tích Header Email
Phân tích header email thô và theo dõi hành trình email
Kiểm Tra Danh Sách Đen IP
Kiểm tra xem địa chỉ IP có nằm trong danh sách đen spam hoặc malware không
Tra Cứu DNS Ngược
Tìm hostname liên kết với bất kỳ địa chỉ IP nào qua bản ghi PTR
Tra Cứu DNS
Mọi bản ghi DNS từ máy chủ của chính tên miền, cạnh bộ nhớ đệm của Google và Cloudflare
Tạo Bản Ghi SPF
Tạo bản ghi SPF TXT hợp lệ cho các nhà cung cấp email và máy chủ của bạn, kèm kiểm tra trực tiếp giới hạn 10 lần tra cứu DNS
