SPF, DKIM, DMARC toàn tập: xác thực email từ A đến Z
Danh mục: Vào hộp thư
Nếu bạn gửi email từ domain riêng (ví dụ tenban@congtycuaban.vn) mà email cứ rơi vào spam, hoặc tệ hơn là bị Gmail/Yahoo từ chối thẳng, thì gần như chắc chắn vấn đề nằm ở xác thực domain. Ba bản ghi DNS — SPF, DKIM và DMARC — là tấm hộ chiếu chứng minh email thật sự do bạn gửi, chứ không phải kẻ giả mạo. Bài này đi từ con số 0: mỗi bản ghi làm gì, vì sao bắt buộc phải có, cách thêm vào DNS, cú pháp mẫu, cách tự kiểm tra và những lỗi khiến hàng nghìn người mắc kẹt.
Vì sao gấp gáp từ 2024? Từ tháng 2/2024, Gmail và Yahoo bắt buộc người gửi khối lượng (từ ~5.000 thư/ngày tới Gmail) phải có đủ SPF, DKIM và DMARC, kèm tỷ lệ báo spam dưới 0,3%. Thiếu xác thực, thư của bạn có thể bị chặn ngay tại cổng. Đây không còn là “mẹo nâng cao” mà là điều kiện tối thiểu để vào được hộp thư.
Bức tranh tổng quát: ba lớp bảo vệ
Hãy hình dung mỗi email là một lá thư gửi qua bưu điện. Nhà cung cấp hộp thư (Gmail, Outlook, Yahoo…) đóng vai người gác cổng, phải trả lời câu hỏi: “Lá thư này có thật sự do người gửi ghi trên phong bì gửi không?”. Ba bản ghi trả lời ba khía cạnh khác nhau:
- SPF — “Máy chủ nào được phép gửi thay mặt domain của tôi?”. Như danh sách bưu cục được uỷ quyền.
- DKIM — “Nội dung lá thư có bị sửa dọc đường không?”. Như con dấu niêm phong bằng chữ ký số.
- DMARC — “Nếu thư không vượt qua SPF/DKIM thì phải làm gì, và báo cáo cho ai?”. Như chính sách xử lý thư đáng ngờ.
Cả ba đều là bản ghi DNS — bạn thêm chúng ở nơi quản lý tên miền (Cloudflare, Namecheap, GoDaddy, Mắt Bão, PA Việt Nam…). Không cần đụng tới máy chủ hay code.
1. SPF — Sender Policy Framework
SPF là một bản ghi TXT liệt kê những máy chủ (IP, dịch vụ) được phép gửi email cho domain của bạn. Khi thư tới, mailbox sẽ tra IP của máy chủ gửi xem có nằm trong danh sách SPF hay không. Nếu không, thư bị nghi giả mạo.
Một bản ghi SPF mẫu khi bạn gửi qua Google Workspace:
v=spf1 include:_spf.google.com ~all
Giải nghĩa từng phần:
v=spf1— phiên bản SPF, luôn mở đầu như vậy.include:_spf.google.com— uỷ quyền cho dải máy chủ của Google. Mỗi nhà cung cấp có chuỗiincluderiêng (ví dụ Amazon SES dùnginclude:amazonses.com).~all— “softfail”: thư từ máy chủ ngoài danh sách bị đánh dấu nghi ngờ nhưng vẫn nhận. Dùng-all(hardfail) khi bạn chắc chắn đã liệt kê đủ — nó từ chối thẳng thư giả mạo, an toàn hơn nhưng dễ “tự bắn vào chân” nếu quên một dịch vụ gửi nào đó.
Cảnh báo phổ biến nhất: mỗi domain chỉ được có đúng một bản ghi SPF. Nếu vừa gửi qua Google, vừa qua một dịch vụ marketing khác, bạn gộp chung các include vào một dòng: v=spf1 include:_spf.google.com include:amazonses.com ~all. Tạo hai bản ghi SPF riêng sẽ khiến SPF hỏng hoàn toàn.
2. DKIM — DomainKeys Identified Mail
DKIM gắn một chữ ký số vào mỗi email gửi đi. Máy chủ gửi dùng khoá bí mật (private key) để ký phần đầu thư và nội dung; mailbox nhận dùng khoá công khai (public key) công bố trong DNS để kiểm chứng. Nếu chữ ký khớp, mailbox tin chắc nội dung không bị sửa và đúng là domain của bạn ký.
DKIM nằm tại một host dạng selector._domainkey.domaincuaban.vn. “Selector” là nhãn do nhà cung cấp chọn (Google dùng google, một số dịch vụ dùng s1, k1…). Giá trị bản ghi TXT trông như:
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ… (khoá công khai dài)
v=DKIM1— phiên bản DKIM.k=rsa— thuật toán khoá (thường là RSA).p=…— khoá công khai. Phải dán nguyên vẹn, không để lọt khoảng trắng hay xuống dòng thừa, nếu không DKIM sẽ thất bại.
Bạn không tự viết khoá này — nó được nhà cung cấp gửi/email khi bạn bật DKIM (Google Workspace, Amazon SES, hoặc dịch vụ SMTP của bạn). Nhiệm vụ của bạn chỉ là dán đúng host và giá trị vào DNS.
3. DMARC — chính sách & báo cáo
DMARC là lớp trên cùng. Nó dựa trên kết quả SPF và DKIM để quyết định làm gì với thư không đạt, đồng thời gửi báo cáo tổng hợp về cho bạn để biết ai đang gửi (hoặc giả mạo) domain của mình. DMARC nằm ở host _dmarc.domaincuaban.vn, bản ghi TXT mẫu:
v=DMARC1; p=none; rua=mailto:dmarc@domaincuaban.vn; fo=1; adkim=s; aspf=s
p=— chính sách áp dụng:none,quarantinehoặcreject(xem mục dưới).rua=mailto:…— địa chỉ nhận báo cáo tổng hợp hằng ngày (dạng XML). Nên tạo một hộp thư riêng vì báo cáo có thể nhiều.adkim=s/aspf=s— yêu cầu khớp “strict” (chặt) cho DKIM/SPF. Đểr(relaxed) nếu bạn dùng nhiều subdomain.pct=(tuỳ chọn) — chỉ áp chính sách cho một phần trăm thư, ví dụpct=25, dùng khi muốn nâng chính sách từ từ.
Ba mức chính sách DMARC: none → quarantine → reject
Đây là phần quan trọng nhất và cũng dễ làm sai nhất. Hãy đi tuần tự, đừng nhảy thẳng lên reject:
| Chính sách | Thư không đạt sẽ… | Dùng khi nào |
|---|---|---|
p=none | Vẫn được gửi như bình thường — chỉ ghi vào báo cáo. | Giai đoạn theo dõi: bật đầu tiên để xem ai đang gửi domain của bạn, chưa chặn gì cả. |
p=quarantine | Bị đưa vào thư mục spam của người nhận. | Sau 2–4 tuần theo dõi, khi báo cáo cho thấy SPF/DKIM của bạn đã ổn định. |
p=reject | Bị từ chối thẳng, không tới được người nhận. | Khi đã hoàn toàn tự tin: mọi luồng gửi hợp lệ đều pass. Đây là mức bảo vệ chống giả mạo tốt nhất. |
Mẹo lộ trình an toàn: bắt đầu p=none trong 2–4 tuần, đọc báo cáo rua để chắc mọi dịch vụ gửi hợp lệ (Google, Mailemdi/SES, hoá đơn, CRM…) đều pass. Sau đó chuyển p=quarantine (có thể kèm pct=25 rồi tăng dần). Khi mọi thứ xanh, nâng lên p=reject. Nhảy thẳng reject mà chưa kiểm tra dễ khiến hoá đơn, email hệ thống của chính bạn bị từ chối.
“Alignment” — vì sao SPF/DKIM PASS mà DMARC vẫn fail
Đây là điểm khiến nhiều người bối rối nhất. DMARC không chỉ cần SPF hoặc DKIM đạt, mà còn cần domain trong các kết quả đó trùng khớp (align) với domain ở dòng From: mà người nhận thấy. Ví dụ: bạn dùng một dịch vụ marketing gửi thay, SPF có thể PASS nhưng lại PASS cho domain của dịch vụ đó (ví dụ mail.dichvu.com), không phải congtycuaban.vn của bạn — thế là DMARC vẫn fail. Cách xử lý: bật DKIM ký bằng chính domain của bạn (hầu hết dịch vụ cho phép cấu hình domain ký), hoặc dùng địa chỉ From: thuộc đúng domain đã xác thực. Đặt adkim=r / aspf=r (relaxed) cho phép khớp ở mức subdomain, dễ pass hơn s (strict).
Ví dụ thực chiến: shop của bạn gửi 3 luồng — email chăm sóc qua Mailemdi/SES, hoá đơn điện tử qua một nhà cung cấp riêng, và thông báo nội bộ qua Google Workspace. Khi bật p=none, đọc báo cáo rua bạn sẽ thấy cả ba nguồn này. Hãy chắc cả ba đều align (DKIM ký bằng domain của bạn) trước khi nâng lên quarantine. Bỏ sót luồng hoá đơn là nguyên nhân kinh điển khiến khách “không nhận được hoá đơn” sau khi siết DMARC.
Cách thêm bản ghi DNS từng bước
Quy trình gần như giống nhau ở mọi nhà cung cấp tên miền:
- Bước 1. Đăng nhập nơi quản lý tên miền (Cloudflare, Namecheap, GoDaddy, Mắt Bão…) và mở mục DNS / DNS Management / Quản lý bản ghi.
- Bước 2. Chọn Add record, loại
TXT. - Bước 3. Với SPF: Name/Host là
@(gốc domain), Value là chuỗiv=spf1 …. - Bước 4. Với DKIM: Name là
selector._domainkey(ví dụgoogle._domainkey), Value là chuỗiv=DKIM1; …. - Bước 5. Với DMARC: Name là
_dmarc, Value là chuỗiv=DMARC1; p=none; …. - Bước 6. Lưu lại. DNS cần thời gian lan truyền — thường vài phút, đôi khi tới 24–48 giờ.
Lưu ý ô Name/Host: nhiều bảng điều khiển tự thêm domain phía sau. Nếu nhập đầy đủ _dmarc.domaincuaban.vn mà hệ thống lại biến thành _dmarc.domaincuaban.vn.domaincuaban.vn thì bạn chỉ cần nhập _dmarc thôi. Đây là lỗi “nhân đôi domain” rất hay gặp.
Làm việc này với Mailemdi nhanh hơn
Bạn không phải tự dò DNS bằng tay. Trong Mailemdi, vào Cài đặt → Xác thực domain, nhập domain gửi rồi bấm Kiểm tra. Hệ thống dò trực tiếp DNS, hiển thị tiến độ x/3 và đánh dấu từng bản ghi SPF/DKIM/DMARC đã đạt hay còn thiếu kèm gợi ý sửa. Thêm đủ bản ghi tại nhà cung cấp domain rồi bấm Kiểm tra lại.
Quan trọng: Mailemdi chặn ở bước gửi/lên lịch (lỗi 409) nếu domain riêng của bạn còn thiếu SPF hoặc DKIM, kèm lý do rõ ràng, để tránh đốt uy tín gửi — nhưng vẫn cho phép bạn chọn “vẫn gửi” nếu chấp nhận rủi ro. Nếu gửi khối lượng qua Amazon SES, dùng mục SES để đăng ký domain (Easy DKIM) và thêm 3 bản ghi CNAME vào DNS; chỉ khi trạng thái DKIM chuyển SUCCESS thì SES mới cho phép gửi.
Quy trình đề xuất với người mới: (1) bật SPF + DKIM trước, dùng trang Cài đặt → Xác thực domain kiểm tra tới khi vòng tròn báo 2/3 trở lên; (2) thêm DMARC ở mức p=none để bắt đầu nhận báo cáo; (3) chỉ khi cả ba báo 3/3 mới yên tâm chạy chiến dịch khối lượng. Trước khi gửi thật, đừng quên soi nội dung bằng công cụ Soát từ khoá spam — xác thực domain mà tiêu đề/nội dung vẫn “bốc mùi” spam thì thư vẫn dễ bị lọc.
Cách kiểm tra đã đúng chưa
- Tự gửi thử: gửi một email tới chính tài khoản Gmail của bạn, mở thư, bấm Hiển thị bản gốc (Show original). Bạn sẽ thấy ba dòng
SPF: PASS,DKIM: PASS,DMARC: PASS. Cả ba PASS là đạt. - Dò DNS ngay trong Mailemdi: vào Cài đặt → Xác thực domain, nhập domain và bấm Kiểm tra — hệ thống đọc trực tiếp giá trị SPF/DKIM/DMARC đang công bố và đối chiếu với chuỗi bạn đã dán, chỉ rõ bản ghi nào còn thiếu hay sai. Ngoài app, bạn có thể tra cùng giá trị bằng lệnh
nslookup -type=TXT _dmarc.domaincuaban.vn(Windows) hoặcdig TXT _dmarc.domaincuaban.vn(macOS/Linux), hoặc các trang tra DNS công khai như MXToolbox, dmarcian. - Đọc báo cáo DMARC: sau vài ngày, các báo cáo
ruabắt đầu về hộp thư, cho biết tỷ lệ pass và những nguồn gửi lạ.
Lỗi thường gặp khiến xác thực thất bại
- Hai bản ghi SPF. Chỉ được có một; nhiều dịch vụ thì gộp
includevào cùng dòng. - Quá 10 lượt tra DNS trong SPF. SPF giới hạn 10 lần “lookup”; nhồi quá nhiều
includesẽ làm SPF tự động permerror (coi như hỏng). - Dán khoá DKIM lỗi. Thiếu ký tự, dính khoảng trắng hoặc xuống dòng giữa chuỗi
p=đều làm chữ ký không khớp. - Sai selector DKIM. Phải khớp đúng selector mà nhà cung cấp dùng để ký; sai một chữ là DKIM fail.
- Nhân đôi domain ở ô Host. Như cảnh báo phía trên — nhập
_dmarcthay vì cả tên miền. - Nhảy thẳng
p=reject. Khi một dịch vụ gửi hợp lệ chưa được cấu hình, thư của chính bạn (hoá đơn, hệ thống) sẽ bị từ chối. - Nóng vội kết luận. DNS có thể mất tới 24–48 giờ lan truyền; chưa thấy pass ngay không có nghĩa là sai.
- Bật proxy Cloudflare cho bản ghi TXT. Bản ghi SPF/DKIM/DMARC phải để chế độ DNS only (đám mây xám), không bật proxy (đám mây cam) — proxy chỉ dành cho A/AAAA/CNAME web.
- Quên subdomain. Nếu gửi từ
tin@mail.congtycuaban.vn, bản ghi phải đặt cho subdomain đó, không phải domain gốc. DMARC ở domain gốc có thể phủ subdomain qua thẻsp=, nhưng SPF/DKIM thì subdomain cần bản ghi riêng.
Câu hỏi nhanh thường gặp
Gửi bằng Gmail/Google Workspace có cần ba bản ghi này không?
Có. Google ký DKIM sẵn nhưng bạn vẫn phải bật DKIM trong Admin Console và dán bản ghi vào DNS, đồng thời tự thêm SPF (include:_spf.google.com) và DMARC. Tài khoản Gmail miễn phí (đuôi @gmail.com) thì không cần — bạn đang gửi dưới danh nghĩa Google.
Tôi gửi rất ít (vài chục thư/ngày) có cần DMARC không?
Ngưỡng bắt buộc của Gmail/Yahoo nhắm vào người gửi khối lượng lớn, nhưng có DMARC vẫn tốt cho mọi quy mô: nó chống kẻ xấu giả mạo domain của bạn để lừa khách hàng. Cứ bật p=none là an toàn và miễn phí.
BIMI là gì, có cần không?
BIMI hiển thị logo thương hiệu cạnh email trong hộp thư, nhưng điều kiện tiên quyết là DMARC đã ở mức quarantine hoặc reject. Hãy làm chắc ba bản ghi nền tảng này trước, BIMI là bước nâng cao về sau.
Xác thực xong rồi, còn gì nữa để vào inbox?
SPF/DKIM/DMARC là điều kiện cần, không phải điều kiện đủ. Có hộ chiếu hợp lệ nhưng nội dung và hành vi gửi xấu thì vẫn vào spam. Theo kinh nghiệm, bạn nên kết hợp:
- Làm nóng (warmup) tài khoản gửi mới — tăng dần lượng gửi để xây uy tín. Mailemdi tự bật warmup cho tài khoản SES tạo mới.
- Giữ danh sách sạch và để suppression list tự loại địa chỉ bounce/báo spam.
- Tránh từ ngữ kiểu spam trong tiêu đề và nội dung.
- A/B test tiêu đề để tăng tương tác — tương tác cao cũng giúp danh tiếng người gửi.
Trước khi bấm gửi, hãy soi nhanh nội dung bằng công cụ Soát từ khoá spam, và đọc kỹ hướng dẫn tổng hợp tại trang Vào hộp thư đến để hiểu cách Mailemdi giám sát bounce/complaint và bảo vệ uy tín gửi cho bạn. Nếu cần dựng luồng gửi tự động, xem thêm hướng dẫn Automation.
Sẵn sàng gửi email vào đúng hộp thư?
Mailemdi tự kiểm tra SPF/DKIM/DMARC, làm nóng tài khoản gửi và giám sát uy tín cho bạn. Tạo tài khoản và xác thực domain chỉ trong vài phút.
Bắt đầu miễn phí với Mailemdi