Tutorial · 12 phút đọc
Bảy DNS record mọi người gửi email tự host cần có
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.
| # | Record | Mục đích | Spec |
|---|---|---|---|
| 1 | MX | Nơi mail inbound tới domain này đi đến | RFC 1035 §3.3.9 |
| 2 | SPF (TXT) | Danh sách IP gửi được uỷ quyền | RFC 7208 |
| 3 | DKIM (TXT) | Public key ký | RFC 6376 |
| 4 | DMARC (TXT) | Policy khi auth fail + reporting | RFC 7489 |
| 5 | Tracking (CNAME) | Tracker click và open dưới domain của bạn | RFC 1035 |
| 6 | MTA-STS | Bắt buộc TLS trên mail inbound | RFC 8461 |
| 7 | BIMI (TXT) | Logo thương hiệu kế bên message trong inbox | draft-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.
Type: MX Name: @ Mail server: mail.yourcompany.com Priority: 10
{ "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.
Type: TXT Name: @ Value: v=spf1 include:amazonses.com -all
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):
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:
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).
Type: TXT Name: _dmarc Value: v=DMARC1; p=none; rua=mailto:dmarc@yourcompany.com; pct=100; adkim=r; aspf=r
Type: TXT Name: _dmarc Value: v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc@yourcompany.com
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.
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:
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.
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:
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ồ.
Đọc tiếp
Tài liệu liên quan trên site.
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.