Email dạng lienhe@example.com trông chuyên nghiệp hơn hộp thư miễn phí. Nhưng nếu thiếu bản ghi xác thực, thư của bạn dễ vào spam hoặc bị từ chối. Các nhà cung cấp hộp thư lớn hiện yêu cầu người gửi số lượng lớn phải có SPF, DKIM và DMARC. Bài này giúp bạn khai báo đúng MX, SPF, DKIM, DMARC, kiểm tra kết quả và xử lý lỗi thường gặp.
Bạn cần chuẩn bị:
- Tên miền
example.comvà quyền sửa DNS. - Một dịch vụ email theo tên miền: email đi kèm hosting, dịch vụ email doanh nghiệp, hoặc mail server tự dựng.
- Thông tin từ nhà cung cấp email: bản ghi MX, chuỗi include cho SPF, khóa DKIM.
- Danh sách mọi nơi gửi thư bằng tên miền: hộp thư, website (form, WooCommerce), công cụ gửi bản tin, hệ thống hóa đơn.
Bước 1: Tạo hộp thư và khai báo MX
Tạo hộp thư trong trang quản trị của nhà cung cấp email. Sau đó thêm bản ghi MX theo đúng thông tin họ cung cấp. Ví dụ:
| Loại | Tên | Ưu tiên | Giá trị |
|---|---|---|---|
| MX | @ | 10 | mx1.mailprovider.example.net. |
| MX | @ | 20 | mx2.mailprovider.example.net. |
Xóa các MX cũ không còn dùng. MX thừa khiến một phần thư đi lạc tới máy chủ cũ. Kiểm tra:
dig +short MX example.com
Bước 2: Tạo bản ghi SPF
SPF liệt kê các máy chủ được phép gửi thư thay mặt tên miền. Máy nhận so IP người gửi với danh sách này. Bản ghi SPF là một TXT tại tên miền gốc:
example.com. TXT "v=spf1 include:_spf.mailprovider.example.net ~all"
Nếu website trên VPS 203.0.113.10 cũng gửi thư trực tiếp, và bạn dùng thêm một dịch vụ gửi bản tin, gộp lại thành một bản ghi:
example.com. TXT "v=spf1 ip4:203.0.113.10 include:_spf.mailprovider.example.net include:spf.newsletter.example.org ~all"
Ý nghĩa các thành phần:
ip4:,ip6:: IP cụ thể được phép gửi.include:: lấy danh sách từ SPF của dịch vụ khác.~all: thư từ nguồn khác bị đánh dấu nghi ngờ.-all: từ chối hẳn.
SPF giới hạn tối đa 10 lần tra cứu DNS (mỗi include, a, mx tính là tra cứu, kể cả các include lồng bên trong). Vượt giới hạn, SPF trả về permerror. Hạn chế dùng a và mx nếu không cần.
Bước 3: Bật DKIM
DKIM gắn chữ ký số vào mỗi thư. Máy nhận lấy khóa công khai từ DNS để kiểm tra thư không bị sửa và đúng là từ tên miền của bạn. Trong trang quản trị email, tìm mục DKIM, tạo khóa (nên chọn 2048 bit). Bạn sẽ nhận một bản ghi dạng:
selector1._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqh...IDAQAB"
Hoặc dạng CNAME trỏ về hệ thống của nhà cung cấp:
selector1._domainkey.example.com. CNAME selector1.dkim.mailprovider.example.net.
Phần selector1 là tên selector, mỗi nhà cung cấp đặt khác nhau. Khóa 2048 bit dài hơn 255 ký tự. Một số trang quản lý DNS tự chia thành nhiều chuỗi, số khác yêu cầu bạn dán nguyên. Sau khi thêm bản ghi, quay lại trang quản trị email và bấm kích hoạt DKIM.
Với mail server tự dựng trên VPS, công cụ như OpenDKIM tạo cặp khóa. Website gửi qua SMTP của nhà cung cấp email sẽ tự được ký DKIM, nên đây là cách đơn giản nhất cho form liên hệ.
Bước 4: Thêm DMARC
DMARC cho máy nhận biết phải làm gì khi thư không qua SPF hoặc DKIM và căn chỉnh (alignment) với tên miền trong địa chỉ From. Nó cũng gửi báo cáo về cho bạn. Bắt đầu ở chế độ chỉ theo dõi:
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com; adkim=r; aspf=r"
| Thẻ | Ý nghĩa |
|---|---|
p=none | Chỉ theo dõi, không chặn |
p=quarantine | Đưa thư không đạt vào spam |
p=reject | Từ chối thư không đạt |
rua= | Địa chỉ nhận báo cáo tổng hợp hằng ngày (XML) |
adkim=r, aspf=r | Căn chỉnh nới lỏng, cho phép tên miền phụ |
Nên tạo hộp thư riêng nhận báo cáo, vì lượng XML có thể nhiều. Theo dõi vài tuần, khi mọi nguồn gửi hợp lệ đều đạt, nâng lên p=quarantine, rồi p=reject.
Bước 5: Cấu hình website gửi thư qua SMTP
WordPress mặc định gửi bằng hàm mail() của PHP, thư đi trực tiếp từ VPS, thường không có DKIM và dễ vào spam. Hãy dùng một plugin SMTP, khai báo máy chủ SMTP của nhà cung cấp email, cổng 587 với STARTTLS hoặc 465 với SSL, đăng nhập bằng một hộp thư như noreply@example.com. Địa chỉ From phải thuộc tên miền example.com để căn chỉnh DMARC.
Nếu tự gửi thư trực tiếp từ VPS, cần thêm bản ghi PTR (reverse DNS) của IP trỏ về tên máy chủ, ví dụ mail.example.com, và tên đó có bản ghi A trỏ ngược lại IP. PTR do nhà cung cấp VPS cấu hình, thường trong trang quản trị VPS. Nhiều nhà cung cấp chặn cổng 25 gửi ra theo mặc định.
Kiểm tra lại
Kiểm tra bản ghi bằng dig:
dig +short TXT example.com | grep spf
dig +short TXT selector1._domainkey.example.com
dig +short TXT _dmarc.example.com
Sau đó gửi thư tới một hộp thư miễn phí lớn, mở thư và chọn xem thư gốc (Show original hoặc View source). Tìm dòng Authentication-Results:
Authentication-Results: mx.receiver.example;
dkim=pass header.d=example.com header.s=selector1;
spf=pass smtp.mailfrom=example.com;
dmarc=pass (p=NONE) header.from=example.com
Cả ba phải là pass, và header.d của DKIM phải là example.com (không phải tên miền của nhà cung cấp). Lặp lại với thư gửi từ website và từ công cụ bản tin.
Lỗi thường gặp và cách xử lý
spf=permerror
Có hai bản ghi SPF, sai cú pháp, hoặc vượt 10 lần tra cứu DNS. Gộp thành một bản ghi, bỏ các include không còn dùng.
spf=pass nhưng dmarc=fail
SPF đạt cho tên miền trong Return-Path (thường là tên miền của dịch vụ gửi), không khớp với tên miền From. Bật DKIM với tên miền riêng trong dịch vụ đó, hoặc cấu hình Return-Path tùy chỉnh (custom bounce domain) theo hướng dẫn của dịch vụ.
dkim=fail (body hash did not verify)
Thư bị sửa sau khi ký, thường do phần mềm chèn chữ ký, chân thư hoặc danh sách thư chuyển tiếp. Kiểm tra lại bản ghi DKIM có bị cắt mất ký tự khi dán không.
Không nhận được thư gửi tới hộp thư mới
Kiểm tra MX đã lan truyền chưa (dig MX example.com @8.8.8.8). Nếu tên miền dùng Cloudflare, bản ghi A của mail phải để DNS only, không bật proxy.
Thư từ form website không tới
Xem log plugin SMTP. Lỗi xác thực thường do sai mật khẩu, cần mật khẩu ứng dụng, hoặc dùng sai cổng. Thử kết nối: openssl s_client -starttls smtp -connect smtp.mailprovider.example.net:587.