Tutorial · 12 phút đọc

Bảy DNS record mọi người gửi email tự host cần có

Tác giả Đội ngũ AcelleMail May 8, 2026 12 phút đọc
tutorial deliverability

Tài liệu DNS dạng copy-paste: SPF, DKIM, DMARC, MX, BIMI, MTA-STS, và một CNAME tracking-domain. Cú pháp cụ thể cho CloudFlare và Route53, thứ tự publish, và mỗi record thực sự làm gì.

§1

Bảy record, theo thứ tự publish

Email là loại bất thường: một setup sender hoàn chỉnh có bảy DNS record riêng biệt trải trên ba hay bốn loại record. Thiếu một cái thì message vẫn truyền qua dây, nhưng mailbox provider sẽ âm thầm hạ bạn xuống thư mục spam. Publish đủ bảy thì bạn vượt qua ngưỡng "tất cả những gì Google yêu cầu" trong /guide/email-deliverability.

Thứ tự quan trọng: SPF và DKIM phải xong trước khi DMARC bắt đầu enforce alignment, nếu không mail hợp lệ bị quarantine. Quy tắc bất biến trên mọi vendor cũng là "đợi DNS propagate" — cho phép ít nhất 30 phút giữa việc publish một record và yêu cầu mailbox provider re-check.

#RecordMục đíchSpec
1MXNơi mail inbound tới domain này đi đếnRFC 1035 §3.3.9
2SPF (TXT)Danh sách IP gửi được uỷ quyềnRFC 7208
3DKIM (TXT)Public key kýRFC 6376
4DMARC (TXT)Policy khi auth fail + reportingRFC 7489
5Tracking (CNAME)Tracker click và open dưới domain của bạnRFC 1035
6MTA-STSBắt buộc TLS trên mail inboundRFC 8461
7BIMI (TXT)Logo thương hiệu kế bên message trong inboxdraft-blank-ietf-bimi

§2

1) MX — ngay cả khi bạn không nhận nhiều mail

MX record (RFC 1035 §3.3.9) báo cho thế giới nơi deliver mail inbound cho domain của bạn. Ngay cả khi sending domain của bạn là "outbound only" (bạn không đọc reply trên đó), MX record vẫn bắt buộc — nhiều mailbox provider hạ reputation cho domain không có MX, theo lý thuyết rằng sender hợp lệ nhận reply. Một record đơn lẻ trỏ tới bất kỳ mail server reachable nào là đủ, dù server đó chỉ deliver tới một mailbox postmaster.

; CloudFlare DNS UI
Type: MX  Name: @  Mail server: mail.yourcompany.com  Priority: 10
# Route53 JSON
{ "Type": "MX", "Name": "yourcompany.com.", "TTL": 3600,
  "ResourceRecords": [{ "Value": "10 mail.yourcompany.com." }] }

§3

2) SPF — một TXT, để mắt tới lookup count

SPF (RFC 7208) là một TXT record đơn lẻ liệt kê những IP nào được uỷ quyền gửi cho domain. Quy tắc cứng: tổng DNS lookup đệ quy phải dưới 10 (RFC 7208 §4.6.4). Mỗi include: tốn một; include lồng nhau cộng dồn. Cơ chế ip4: / ip6: tốn zero lookup, nên gập include cũ thành dải IP tường minh nếu count cứ trườn lên.

# Cho Amazon SES (cặp được khuyến nghị)
Type: TXT  Name: @  Value: v=spf1 include:amazonses.com -all
# Cho Postal/Postfix tự host trên một IP đơn
Type: TXT  Name: @  Value: v=spf1 ip4:1.2.3.4 -all

Kết bằng -all (hard-fail) khi bạn đã verify mọi nguồn gửi hợp lệ đã được phủ. Nếu chưa chắc, bắt đầu với ~all (soft-fail) và siết về -all sau hai tuần báo cáo DMARC sạch.

§4

3) DKIM — vendor-managed cho SES, custom cho Postal

DKIM (RFC 6376) publish nửa public của cặp khoá ký dưới dạng TXT record tại {selector}._domainkey.{domain}. "Selector" là identifier bạn chọn — theo vendor hoặc tuỳ ý. Với SES, AWS cho bạn ba CNAME phân giải thành TXT record do AWS quản lý (để AWS có thể xoay khoá mà bạn không phải đụng vào DNS):

# SES Easy DKIM — 3 CNAME (AWS xoay khoá qua các record này)
Type: CNAME  Name: token1._domainkey  Value: token1.dkim.amazonses.com
Type: CNAME  Name: token2._domainkey  Value: token2.dkim.amazonses.com
Type: CNAME  Name: token3._domainkey  Value: token3.dkim.amazonses.com

Với Postal hay Postfix+OpenDKIM tự host, bạn tạo cặp khoá local, cấu hình MTA để ký, và publish nửa public dưới dạng TXT:

# Tạo qua openssl, rồi publish nửa .txt
Type: TXT  Name: s1._domainkey  Value: v=DKIM1; k=rsa; p=MIGfMA0G…

Đi đường nào cũng vậy, verify bằng dig TXT {selector}._domainkey.{domain} trước khi tuyên bố DKIM xong.

§5

4) DMARC — bắt đầu p=none, kết thúc p=reject

DMARC (RFC 7489) đặt tại _dmarc.{domain}. Bỏ qua bước ramp p=none là sai lầm phổ biến nhất — nhảy thẳng tới p=reject trên một domain mà luồng mail của nó bạn chưa hiểu hết sẽ âm thầm bounce mail hợp lệ (forwarder, mailing list, sender CRM bên thứ ba).

# Giai đoạn 1 (tuần 1-3) — chỉ monitor
Type: TXT  Name: _dmarc  Value: v=DMARC1; p=none; rua=mailto:dmarc@yourcompany.com; pct=100; adkim=r; aspf=r
# Giai đoạn 2 (tuần 4-5) — enforce một phần
Type: TXT  Name: _dmarc  Value: v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc@yourcompany.com
# Giai đoạn 3 (tuần 6+) — enforce đầy đủ
Type: TXT  Name: _dmarc  Value: v=DMARC1; p=reject; pct=100; rua=mailto:dmarc@yourcompany.com

Đọc các báo cáo aggregate XML hằng ngày rớt vào mailbox rua của bạn giữa các giai đoạn. Công cụ như DMARC analyzer của Postmark hay Parsedmarc tự host visualise chúng; XML thô đặc nhưng đọc được.

§6

5) CNAME tracking domain — giữ niềm tin

Mặc định, URL open-pixel và click-tracking của AcelleMail đến từ primary domain của install. Mailbox provider thích thấy root domain nhất quán xuyên qua From, click link, và URL unsubscribe — tất cả trên cùng một domain đã đăng ký. Về branding, link trỏ tới tracker.yourcompany.com cũng phát tín hiệu tin cậy hơn link trỏ tới links.acellemail.com.

# CNAME subdomain tracking → install AcelleMail
Type: CNAME  Name: track  Value: app.yourcompany.com

# Sau đó trong admin AcelleMail: Settings → Tracking domain
# Đặt: track.yourcompany.com

Một khi CNAME đã phân giải, AcelleMail viết lại mọi URL click-tracking trong message gửi đi để dùng nó. Domain unsubscribe-link theo cùng quy tắc (và cùng CNAME).

§7

6) MTA-STS — bắt buộc TLS inbound

MTA-STS (RFC 8461) báo cho sender khác "luôn yêu cầu TLS khi deliver tới MX của tôi". Không có nó, kẻ tấn công trên đường truyền có thể downgrade một handshake có khả năng TLS xuống cleartext. Có nó, sending server từ chối deliver nếu TLS không thể thiết lập. Implementation là một TXT record trỏ tới file policy được host:

# DNS record
Type: TXT  Name: _mta-sts  Value: v=STSv1; id=20260508T120000;

# File policy host tại https://mta-sts.yourcompany.com/.well-known/mta-sts.txt
version: STSv1
mode: enforce
mx: mail.yourcompany.com
max_age: 604800

Chạy policy ở mode: testing trong tuần đầu, rồi flip sang mode: enforce. Nhiều bulk sender bỏ qua MTA-STS — triển khai nó là tín hiệu tin cậy miễn phí.

§8

7) BIMI — logo thương hiệu kế bên message trong inbox

BIMI (Brand Indicators for Message Identification) là cái trẻ nhất trong bảy và là cái duy nhất chưa phải RFC chính thức, nhưng được hỗ trợ bởi Gmail, Yahoo, Apple Mail, Fastmail, và các client khác trong production. Thoả thuận: publish một TXT record trỏ tới logo SVG và (tuỳ chọn) một Verified Mark Certificate (VMC), và các client hỗ trợ sẽ hiển thị logo kế bên message của bạn trong danh sách inbox.

# Không VMC (miễn phí, phủ ít hơn)
Type: TXT  Name: default._bimi  Value: v=BIMI1; l=https://yourcompany.com/bimi-logo.svg

# Có VMC (trả phí, phủ Gmail đầy đủ)
Type: TXT  Name: default._bimi  Value: v=BIMI1; l=https://yourcompany.com/bimi-logo.svg; a=https://yourcompany.com/bimi-cert.pem

Điều kiện tiên quyết: policy DMARC ở mức ít nhất p=quarantine (BIMI không được honour dưới p=none), và SVG phải là SVG Tiny Portable / Secure (SVG-PS). Mức chấp nhận khác nhau: Gmail yêu cầu một VMC trả phí ($1.500/năm qua DigiCert / Entrust) để hiển thị đầy đủ trong inbox-list; Yahoo và Apple chấp nhận BIMI không cần VMC. Mức nâng open-rate 5-20% thường được báo cáo trong các case study đã publish.

§9

Verify toàn bộ chain trong 30 giây

Sau khi publish, gửi cho chính bạn một message thử và kiểm tra header. Gmail web: mở message, click menu ba chấm, "Show original". Tìm:

Authentication-Results: mx.google.com;
  dkim=pass header.i=@yourcompany.com header.s=token1
  spf=pass smtp.mailfrom=yourcompany.com
  dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=yourcompany.com

Ba verdict pass là mức chuẩn. Bất cứ gì kém hơn — fail, softfail, neutral — nghĩa là một record sai, hoặc DNS chưa propagate, hoặc body mail đang bị sửa đổi trên đường truyền (hiếm). Đối chiếu với spec canonical Authentication-Results header (RFC 8601) nếu verdict mơ hồ.

Tự host trên hạ tầng của bạn.

AcelleMail là nền tảng email tự host mua một lần. Full source code, không tính phí theo subscriber.

Mua AcelleMail — $80 Xem Demo trực tiếp