Pillar guide · 24 phút đọc · Cập nhật May 2026

Deliverability email năm 2026 — chuẩn xác thực, lịch warmup, và feedback loop.

Deliverability là khoảng cách giữa một campaign nằm trong inbox và cũng campaign đó rơi vào spam folder. Nó là hàm của ba chuẩn xác thực (SPF, DKIM, DMARC), một điểm reputation (IP + From-domain), và hai kỷ luật vận hành (list hygiene, xử lý bounce). Hướng dẫn này đi qua cả sáu — kèm syntax cụ thể, số hiệu RFC, tooling của AcelleMail, và một lịch warmup theo ngày bạn có thể paste thẳng vào runbook.

Trong hướng dẫn này

  1. Deliverability thực sự là gì
  2. SPF — sender policy framework
  3. DKIM — ký bằng mật mã
  4. DMARC — alignment + reporting
  5. BIMI + bonus logo thương hiệu
  6. Reputation — chấm điểm IP + domain
  7. IP warmup — lịch 6 tuần
  8. Bounce, complaint, feedback loop
  9. List hygiene — suppression + opt-in
  10. Tooling deliverability của AcelleMail
  11. Sự cố thường gặp + cách xử lý
  12. FAQ

§1 · Định nghĩa

Deliverability email thực sự là gì.

Deliverability là tỷ lệ message bạn gửi đến được primary inbox của recipient — khác với delivery (message đã được mail server của recipient nhận) và khác với send (bạn đã đẩy nó vào sending pipeline). Một message có thể được send thành công, delivered tới mail server của recipient, rồi rớt vào spam folder — đó là delivery success và deliverability failure. Các con số mọi người quan tâm — open rate, click rate, conversion — phụ thuộc vào deliverability, không phải delivery.

Mailbox provider — Gmail, Outlook, Yahoo, Apple iCloud Mail, Proton, các provider regional lớn — mỗi nơi chạy một pipeline chấm điểm nhiều stage trên từng message đi vào. Các stage gần giống nhau giữa các provider, chỉ khác trọng số:

  1. Kiểm tra ở connection-time. Reverse DNS, HELO/EHLO sanity, hỗ trợ TLS, IP có nằm trên RBL (Spamhaus, SpamCop, …) hay không.
  2. Kiểm tra xác thực. SPF pass/fail (RFC 7208), validate chữ ký DKIM (RFC 6376), DMARC alignment (RFC 7489). Cả ba phải pass sạch sẽ để được hưởng scoring downstream nhẹ tay nhất.
  3. Chấm điểm nội dung. Mật độ keyword spam, reputation của link, tỷ lệ image-to-text, From-name có khớp với From-address không.
  4. Tra cứu reputation. Bản ghi nội bộ của provider về IP gửi và From-domain của bạn — bounce rate lịch sử, complaint rate, engagement trên các send trước đó.
  5. Tín hiệu engagement. Recipient (hoặc cohort của họ) đã từng open hoặc click các message tương tự từ bạn chưa? Engagement gần đây là tín hiệu tích cực mạnh nhất xét riêng lẻ.
  6. Disposition. Inbox, tab Promotions (Gmail), spam folder, hay reject. Disposition lại quay vòng làm input cho reputation.

Năm section bên dưới xử lý stage 2 (authentication) và stage 4 (reputation). Stage 1 chủ yếu là việc của sending relay; stage 3 và 5 là quyết định nội dung + audience nằm ngoài phạm vi của một guide deliverability. Stage 6 là output. Với một sender thương mại điển hình, làm đúng stage 2 và 4 đưa bạn từ 60–80% inbox lên 95%+.

Guide này viết cho operator self-hosted vì chính bạn là người xoay các núm. Trên SaaS, nền tảng abstract phần lớn việc này; trên self-hosted bạn sở hữu record SPF, keypair DKIM, policy DMARC, lịch IP warmup. Tin tốt: các chuẩn là public và ổn định. Tin xấu: không có lối tắt.

§2 · SPF

SPF — Sender Policy Framework.

SPF (RFC 7208) là một danh sách công khai các địa chỉ IP được uỷ quyền gửi mail thay mặt domain của bạn. Bạn publish nó như một TXT record duy nhất trên sending domain. Khi mailbox provider nhận một message tự xưng đến từ @yourcompany.com, nó tra record SPF tại yourcompany.com và hỏi: message này có đến từ một trong các IP được liệt kê không? Có thì SPF pass. Không thì SPF fail.

Cú pháp

v=spf1 include:amazonses.com ~all

Đọc là: "SPF version 1, authorize bất cứ gì Amazon SES authorize, soft-fail mọi thứ còn lại." ~all ở cuối là mệnh đề catch-all. ~all = soft-fail (đánh dấu khả nghi nhưng vẫn nhận), -all = hard-fail (reject), ?all = neutral (không có ý kiến). Dùng ~all cho tới khi DMARC khoẻ mạnh, rồi siết lại -all.

Nhiều sender (vd. Google Workspace cho outbound + SES cho marketing + Mailgun cho transactional) được chain qua nhiều cơ chế include::

v=spf1 include:_spf.google.com include:amazonses.com include:mailgun.org ~all

Giới hạn 10 DNS lookup. RFC 7208 §4.6.4 giới hạn quá trình resolve SPF ở 10 DNS lookup tổng cộng. Mỗi include: tính một. Failure thường gặp: chain 5+ vendor và vượt limit, sau đó SPF resolve về permerror và bị xử lý như fail. Audit bằng dig TXT yourcompany.com + một SPF flattener nếu bạn đang gần limit.

SPF trong AcelleMail

Model SendingDomain của AcelleMail expose getSpf() tại app/Model/SendingDomain.php:154, đọc setting toàn cục spf_record và render ra value của TXT record. Method verifySpf(string $ipOrHostname) tại line 363 wrap thư viện Mika56\SPFCheck — query DNS live ở runtime và assert RESULT_PASS. Bề mặt verification trong admin UI hiện xanh khi record đã có và authorize sending IP, đỏ khi không.

Mẹo thực tế: SPF chỉ authenticate envelope sender (mức SMTP MAIL FROM), không phải From-header hiển thị. Đó là phần khoảng cách mà DMARC alignment vá lại — xem §4.

§3 · DKIM

DKIM — DomainKeys Identified Mail.

DKIM (RFC 6376) gắn một chữ ký mật mã vào từng message đi ra. Server nhận fetch public key của bạn từ một TXT record trong DNS, verify chữ ký với một số header cụ thể và body của message, và chấp nhận message là authentic nếu phép toán khớp. SPF nói "IP này được phép gửi cho chúng tôi"; DKIM nói "đúng body và From-header này chưa bị sửa kể từ lúc chúng tôi ký."

Cơ chế

  1. Bạn generate một keypair RSA (tối thiểu 1024-bit, khuyến nghị 2048-bit cho setup mới).
  2. Public key đi vào DNS như một TXT record tại {selector}._domainkey.{yourdomain}. Selector là một chuỗi tuỳ ý (vd. k1, mail, 20251208) bạn chọn để xoay key mà không phá vỡ các message đang inflight.
  3. Private key ở lại trên sending server của bạn. MTA (hoặc sending relay) ký từng message đi ra bằng nó, thêm một header DKIM-Signature.
  4. Mail server của recipient đọc các value d= (domain) và s= (selector) từ header chữ ký, tra {s}._domainkey.{d}, fetch public key, và verify.

DKIM trong AcelleMail

SendingDomain::generateDkimKeys() tại app/Model/SendingDomain.php:221 generate một keypair RSA 1024-bit qua OpenSSL binding của PHP, lưu private half vào dkim_private, và lưu public half vào dkim_public. Selector được đọc từ dkim_selector trên model, fallback về setting toàn cục dkim_selector. Value DNS record render qua $this->getDomain()->getDkimDnsRecord() (line 270) và được hiện cho operator với nút copy cạnh "the value to publish."

Pattern generate key (từ generateDkimKeys()):

$config = [
    'digest_alg' => 'sha256',
    'private_key_bits' => 1024,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
];
$res = openssl_pkey_new($config);
openssl_pkey_export($res, $privKey);
$pubKey = openssl_pkey_get_details($res)['key'];

Verification: $this->getDomain()->verifyDkim() query DNS tại {selector}._domainkey.{domain} và so public key đã publish với value lưu local. Method verify() đầy đủ trên model điều phối các check identity + DKIM + SPF + DMARC trong một call (line 300).

DKIM vendor-managed

Nếu bạn gửi qua Amazon SES, SendGrid, Mailgun, hoặc bất kỳ vendor nào ký phía họ, bạn publish selector + public key của vendor thay vì tự generate. Capability SignsDkimOnServer ở mức driver của AcelleMail (xem app/SendingServers/Capabilities/SignsDkimOnServer.php) đánh dấu các driver xử lý DKIM remote; UI khi đó hiện các CNAME của vendor để publish thay vì generate keypair local. SES dùng ba CNAME uỷ quyền _domainkey về amazonses.com — set một lần và SES xoay underlying key giúp bạn.

§4 · DMARC

DMARC — alignment, policy, và reporting.

DMARC (RFC 7489) nằm trên SPF và DKIM. Nó làm ba việc mà SPF và DKIM riêng lẻ không làm:

  1. Alignment. Yêu cầu envelope domain đã được SPF validate hoặc domain ký DKIM phải khớp với domain From-header hiển thị. Không có alignment, SPF và DKIM có thể pass cho một domain khác với cái recipient thấy — đúng khe hở mà phishing khai thác.
  2. Policy. Báo cho server nhận biết phải làm gì khi alignment fail: none (không làm gì, chỉ report), quarantine (đẩy vào spam), reject (từ chối message ở mức SMTP).
  3. Reporting. Aggregate report (RUA — XML report hàng ngày của mọi send từ domain bạn) và forensic report (RUF — per-failure individual report) gửi đến địa chỉ bạn chỉ định. Report cho bạn visibility về ai đang gửi mail tự xưng là bạn.

Cú pháp

_dmarc.yourcompany.com.    TXT    "v=DMARC1; p=quarantine; rua=mailto:dmarc@yourcompany.com; pct=100; aspf=s; adkim=s"

Đọc là: "DMARC version 1, quarantine các message fail alignment, gửi aggregate report đến dmarc@yourcompany.com, apply policy lên 100% các message fail, yêu cầu strict alignment cho cả SPF và DKIM."

Quy trình rollout chuẩn

  1. Day 0: publish p=none với rua= trỏ về một mailbox có theo dõi. Nhận report trong 7–14 ngày. Đây là observe-only — không message nào bị reject.
  2. Day 14: review report. Nhận diện các sender hợp lệ (SES của chính bạn, IP gửi của CRM, các provider transactional) và đưa hết về SPF + DKIM alignment.
  3. Day 30: siết về p=quarantine; pct=10. Mail không aligned đi vào spam ở 10% recipient. Theo dõi report trong hai tuần.
  4. Day 45: nâng lên pct=50, rồi pct=100 trong 2–4 tuần.
  5. Day 60–90: siết về p=reject. Lúc này mail không aligned bị bounce ngay ở SMTP — phisher dùng domain bạn ăn hard reject.

Đừng bỏ qua rollout. Nhảy thẳng từ không có DMARC sang p=reject là nguyên nhân tự gây ra thảm hoạ deliverability phổ biến nhất: một sender transactional bị quên (CRM, tool support, hệ thống billing) bắt đầu hard-bounce ngay khoảnh khắc p=reject lan ra.

Yêu cầu từ mailbox provider

Từ tháng 2/2024, Gmail và Yahoo yêu cầu DMARC cho bất kỳ sender nào gửi > 5.000 message mỗi ngày tới domain của họ, kèm SPF hoặc DKIM aligned, kèm one-click List-Unsubscribe (RFC 8058). Microsoft 365 tại thời điểm viết bài cũng đã align về cùng chuẩn. Ngưỡng "commercial sending" đã dịch chuyển vĩnh viễn — DMARC không còn là optional cho bất kỳ list nào trên ~1.000 contact. Set nó sớm, kể cả khi list bạn còn nhỏ.

§5 · BIMI

BIMI — bonus logo thương hiệu.

BIMI (Brand Indicators for Message Identification) hiển thị logo thương hiệu của bạn bên cạnh message trong inbox của recipient. Gmail, Yahoo, Apple Mail, và Fastmail hỗ trợ nó tính đến 2025. Đây là tính năng deliverability-adjacent — bản thân không phải authentication — nhưng yêu cầu DMARC ở mức p=quarantine hoặc p=reject như tiền đề, vì vậy nó nằm trong guide này.

Các bước setup (sau khi DMARC ở mức quarantine hoặc nghiêm hơn):

  1. Tạo phiên bản SVG của logo theo spec BIMI SVG Tiny PS — vuông, không có chữ ngoài mark, path đơn giản.
  2. Host SVG ở một URL HTTPS công khai truy cập được.
  3. Tuỳ chọn lấy một Verified Mark Certificate (VMC) từ CA — Gmail yêu cầu để hiện badge với dấu tick xanh, ~$1,500/năm. Common Mark Certificate (CMC) là lựa chọn rẻ hơn cho thương hiệu chưa đăng ký.
  4. Publish BIMI record: default._bimi.yourcompany.com TXT "v=BIMI1; l=https://yourcdn/logo.svg; a=https://yourcdn/vmc.pem"

Tác động deliverability của BIMI là gián tiếp nhưng đo được: logo thương hiệu trong inbox đẩy open rate lên 5–20% trong các case study được publish (data pilot của Yahoo Mail, BIMI report của Mailchimp). Nó cũng là forcing function mạnh — bạn không thể enable BIMI nếu chưa cứng hoá DMARC, nên các team dùng nó như cà rốt cho một đợt dọn dẹp authentication.

§6 · Reputation

Reputation — mailbox provider thực sự chấm điểm cái gì.

Authentication là nhị phân — một record hoặc resolve và align hoặc không. Reputation là liên tục: một điểm từ 0 đến 100 do mỗi mailbox provider duy trì, riêng biệt cho sending IP và From-domain của bạn. Hai điểm số kết hợp lại thành quyết định routing (inbox vs Promotions vs spam vs reject).

Các tín hiệu

Tích cực mạnh nhất

Engagement

Recipient open, click, reply, kéo message ra khỏi spam. Tín hiệu tích cực lớn nhất xét riêng lẻ trong scoring của các provider hiện đại (sau 2020).

Tín hiệu volume

Send đều đặn

Một lịch send hàng tuần ổn định (10K mỗi thứ Ba) báo hiệu vận hành hợp lệ. Một spike 50K không có lịch sử kích hoạt volume-anomaly detection.

Tiêu cực mạnh nhất

Complaint rate

Recipient bấm "report spam." Đích < 0.1% (một trên ngàn). Vượt 0.3% và routing đổ sụp trên các provider trong 48 giờ.

Tiêu cực

Bounce rate

Hard bounce (5xx — địa chỉ không tồn tại) báo hiệu list hygiene kém. Đích < 2%. Trên 5% kéo dài và đa số provider sẽ throttle gắt.

Hard fail

Trúng spam trap

Gửi vào các địa chỉ mà provider seed vào các nguồn list-purchase hoặc reactivate từ mailbox bỏ hoang. Một pristine trap = blocklist tức thì trên đa số provider lớn.

Trung tính nhưng vẫn bị theo dõi

Unsubscribe rate

List khoẻ mạnh chạy 0.1–0.5% mỗi send. Unsub tốt hơn complaint — đó là phiên bản lịch sự của "cái này không liên quan." Đừng làm nó khó.

Xem điểm reputation của bạn ở đâu

  • Google Postmaster Tools (postmaster.google.com) — reputation IP và domain theo góc nhìn Gmail, kèm tuân thủ authentication, tỷ lệ encryption, tỷ lệ spam. Miễn phí.
  • Microsoft SNDS (postmaster.live.com/snds/) — data ở mức IP của Outlook.com, phân loại sender reputation. Miễn phí, cần đăng ký.
  • Yahoo Sender Hub — mới hơn, đăng ký qua trang Yahoo Postmaster. Aggregate stats theo domain.
  • Dashboard của provider — Reputation Dashboard của Amazon SES hiện bounce + complaint rate kèm ngưỡng. SparkPost, Mailgun, SendGrid đều có tương tự.

Check ít nhất một dashboard hàng tuần. Các leading indicator (xu hướng spam rate, IP reputation drop) xuất hiện vài ngày trước downstream effect (open rate giảm) — đến lúc bạn phát hiện một campaign underperform, vấn đề reputation đã trễ hai tuần.

§7 · IP warmup

IP warmup — lịch 6 tuần.

Một sending IP mới khởi điểm reputation bằng 0. Mailbox provider throttle volume lớn từ IP mới một cách có chủ ý — đây là phòng tuyến chính chống snowshoe spammer dựng cloud instance và blast. Warmup là thực hành tăng dần send volume trong 4–6 tuần trong khi giữ trong giới hạn throttle per-day và per-hour, xây reputation một cách hữu cơ.

Bạn chỉ làm việc này một lần cho mỗi IP. Đa số team không bao giờ làm vì IP chia sẻ của Amazon SES, SendGrid, và Mailgun đã pre-warmed. Trường hợp warmup quan trọng: dedicated IP trên SES (thường > 1M send/tháng mới justify), self-hosted Postal MTA trên một cloud instance mới, migration từ ESP này sang ESP khác có đổi domain.

Lịch warmup

Ngày Volume hàng ngày Cohort audience Metric theo dõi
1505% engaged nhấtOpen rate > 30%
21005% engaged nhấtBounce < 2%
3–4200–500Top 10% engagementInbox placement (tool của provider)
5–71K–2KTop 25%Complaint < 0.1%
8–145K → 20KTop 50%SES reputation dashboard xanh
15–2125K → 100KTop 75%Postmaster Tools spam < 0.1%
22–42Volume hàng ngày đầy đủToàn list (loại trừ inactive 6 tháng+)Open rate ổn định, bounce thấp

Lịch dựa trên khuyến nghị warmup published của SparkPost / Postmark / SES, gộp lại thành một bảng theo tuần. Ramp chậm hơn lịch này nếu bạn thấy complaint rate đi lên; ramp nhanh hơn chỉ khi mỗi bước đều có provider xác nhận reputation green-light.

Theo dõi warmup trong AcelleMail

Model SendingServer của AcelleMail có state warmup first-class. warmup_enabled, warmup_strategy_id, và warmup_started_at nằm trên bảng sending_servers; isWarmupEnabled() tại app/Model/SendingServer.php:333 gate quyết định lúc send. Bảng đồng hành SendingServerWarmupLog ghi lại mọi send trong window warmup kèm date, status, và một meta payload serialize — xem app/Model/SendingServerWarmupLog.php.

Pattern: gán một WarmupStrategy (một row định nghĩa đường volume per-day) cho sending server, lật warmup_enabled = true, set warmup_started_at = now(). SendingServerWarmupUsage trong send pipeline track count hôm nay và từ chối dispatch vượt trần daily của strategy. Khi trần day-N của strategy vượt full daily volume của bạn, server tốt nghiệp và warmup mode tự disable.

Các class DynamicRateTrackerInMemoryRateTracker (app/Library/) xử lý rate limiting per-minute / per-hour ở lớp SMTP — kể cả ngoài warmup, AcelleMail vẫn enforce trần rate published của relay để một surge queue không trip throttling phía provider.

§8 · Bounce + complaint

Bounce, complaint, và feedback loop.

Hard bounce vs soft bounce

Hard bounce là failure vĩnh viễn — thường là SMTP code 5xx: địa chỉ không tồn tại, domain không resolve, mailbox của recipient bị disable vĩnh viễn. Model BounceLog của AcelleMail định nghĩa hằng số HARDSOFT tại app/Model/BounceLog.php:33; một hard bounce suppress địa chỉ ngay lập tức. Soft bounce là transient — code 4xx: mailbox đầy, server tạm thời không available, message quá lớn. Soft bounce retry theo lịch backoff; các địa chỉ soft bounce nhiều lần qua nhiều send rồi cuối cùng bị demote về hard.

Bản đồ phân loại cho bounce notification của AWS SES (nguồn mà documentation BounceLog.php:32 của AcelleMail trích): bounce type bao gồm Permanent (hard) với sub-type General / NoEmail / Suppressed / OnAccountSuppressionList; Transient (soft) với sub-type General / MailboxFull / MessageTooLarge / ContentRejected / AttachmentRejected; cộng Undetermined (xử lý như soft, retry).

Complaint

Một complaint là recipient bấm "report as spam" trong email client của họ. Complaint đến qua Feedback Loop (FBL) — một kênh notification per-provider nơi ISP forward cho bạn các message bị report là abuse. FeedbackLoopHandler của AcelleMail tại app/Model/FeedbackLoopHandler.php xử lý message FBL đi vào qua IMAP/POP và parse các header Abuse Reporting Format (ARF, RFC 5965) để trích message ID gốc và feedback type.

Các ARF feedback type mà AcelleMail xử lý (theo FeedbackLoopHandler::FEEDBACK_TYPES tại line 35):

  • abuse — recipient mark rõ ràng là spam. Suppress ngay.
  • fraud — recipient mark là phishing. Suppress + log vào security review.
  • virus — antivirus của recipient flag một payload. Suppress + audit content.
  • other — complaint chung. Suppress.
  • not-spam — report rõ "không phải spam" (hiếm). Loại khỏi suppression — xem EXCLUDED_FEEDBACK_TYPES.

Các mailbox provider lớn tham gia FBL: AOL, Yahoo, Microsoft (qua JMRP), Comcast, BlueTie. Gmail không chạy public FBL — họ chuyển feedback "marked as spam" qua dashboard Postmaster Tools và qua aggregate DMARC report.

Quy tắc suppression

  1. Hard bounce → suppress vĩnh viễn. Không bao giờ retry; địa chỉ đã chết.
  2. Complaint → suppress vĩnh viễn. Recipient đã chủ động bảo dừng. Gửi lại là illegal trong đa số jurisdiction và đốt reputation.
  3. Soft bounce ×3 trong 30 ngày → demote về hard, suppress. Soft bounce dai dẳng là mailbox đầy hoặc connectivity bền vững — coi như chết.
  4. Unsubscribe → suppress cho marketing, không cho transactional. Order receipt và password reset vẫn tiếp tục; campaign dừng.
  5. Trúng spam trap → escalate điều tra. Kéo toàn bộ acquisition source của subscriber đó. List nhiều khả năng bị nhiễm địa chỉ mua hoặc scrape.

§9 · List hygiene

List hygiene — kỷ luật giữ reputation cao.

Authentication là setup một lần. Reputation là kỷ luật vận hành. Bảy thói quen xoay được kim:

  1. Double opt-in cho mọi signup marketing. Một click confirm trước khi địa chỉ vào active list. Loại bỏ typo, role address (info@, sales@), và địa chỉ harvest. Thêm 10–20% friction cho signup; trừ 50–80% rủi ro bounce/complaint.
  2. One-click unsubscribe (RFC 8058). Header List-Unsubscribe trỏ về một URL one-click. Gmail và Yahoo yêu cầu cho sender > 5K/ngày tới domain của họ từ tháng 2/2024. Làm unsub dễ hơn complaint — recipient định bấm "spam" sẽ bấm "unsubscribe" thay.
  3. Re-engagement trước khi suppress. Subscriber không open trong 90 ngày nhận một campaign "chúng tôi muốn vẫn liên quan." Open → giữ. Không open → vào sunset queue. Không open sau 180 ngày → suppress.
  4. Tự suppress bounce. Xử lý webhook bounce trong vài phút; xoá khỏi active sending list trước campaign tiếp theo. BounceLog::record() của AcelleMail và các handler bounce-webhook kiểu vbrandsync làm tự động.
  5. Không bao giờ import list đã mua. Tuyệt đối không. List đã mua đầy spam trap. Một trap hit và domain bạn lên Spamhaus 30+ ngày. Phép toán không bao giờ ổn — list đã mua là một cái hố reputation vĩnh viễn.
  6. Segment theo engagement. Gửi campaign cho 50% engaged gấp đôi tần suất, 50% lạnh nửa tần suất. Đẩy open rate tổng lên, đẩy complaint rate xuống, và cho mailbox provider tín hiệu mạnh "sender này liên quan."
  7. Giới hạn cadence automation. Welcome series + abandoned-cart + post-purchase + birthday + re-engagement có thể tạo 8 message trong một tuần. Giới hạn tổng automation message ở mức một / 48 giờ / recipient, với ngoại lệ cứng cho transactional (receipt, password reset).

§10 · Tooling AcelleMail

Tooling deliverability của AcelleMail — source ship sẵn cái gì.

Trích thẳng từ source tree dưới app/Model/app/Library/. Mỗi entry là một model, capability interface, hoặc library class thật — không phải marketing.

app/Model/SendingDomain.php

Verification DKIM / SPF / DMARC

generateDkimKeys() tại line 221 (RSA 1024-bit qua OpenSSL). verifySpf() tại line 363 wrap Mika56\SPFCheck. verify() tại line 300 điều phối identity + DKIM + SPF + DMARC trong một call.

app/Model/BounceLog.php

Phân loại bounce

Hằng số HARD / SOFT / UNKNOWN. BounceHandler xử lý bounce mail đi vào; payload webhook SES decode thẳng về taxonomy bounce-type của AWS.

app/Model/FeedbackLoopHandler.php

Xử lý FBL (ARF / RFC 5965)

Xử lý feedback loop AOL, Yahoo, Microsoft JMRP qua IMAP. Parse header ARF để khôi phục message ID gốc + feedback type. Tự suppress trên abuse / fraud / virus / other.

app/Model/SendingServerWarmupLog.php

Theo dõi state warmup

Log send per-day so với một WarmupStrategy. Đi cặp với SendingServerWarmupUsage để enforce daily-cap. isWarmupEnabled() trên SendingServer gate đường dispatch.

app/Library/DynamicRateTracker.php

Rate limit per-minute / per-hour

quota_value / quota_base / quota_unit trên mỗi sending server. Trần mặc định — 100/phút, 1K/giờ, 10K/ngày — khớp trần SES sandbox-mode. Điều chỉnh per-server khi relay nâng limit cho bạn.

app/Library/IdentityStore.php

Registry sender đã verify

Cache trạng thái verification per-domain + per-email qua các driver expose SupportsRemoteDomainVerify. Tránh re-check một domain đã verify ở mỗi lần send; refresh theo TTL.

app/SendingServers/Capabilities/

Cờ capability của driver

SignsDkimOnServer, SupportsRemoteDomainVerify, ReceivesWebhooks, SendsCustomVerificationEmail, SupportsCustomReturnPath, AllowsCrossSendingDomain. UI chỉ hiện các bước mà mỗi driver thực sự cần.

app/Model/TrackingDomain.php

Click-tracking domain tuỳ chỉnh

Cho phép bạn serve click-redirect từ links.yourcompany.com thay vì tracking domain mặc định của relay. Cải thiện brand consistency trong inbox; tách reputation của link khỏi hạ tầng ESP chung.

§11 · Troubleshooting

Sự cố deliverability thường gặp và cách xử lý.

"Open rate rớt 30% sau một đêm"

Check đầu tiên: Apple Mail Privacy Protection (MPP). Apple open email trên proxy server của họ, thổi phồng open rate 20–40% so với baseline; bản update iOS có thể reset proxy và trông như một cú rớt thật.

Check thứ hai: spike spam rate trên Postmaster Tools. Nếu > 0.1% bạn đang ở vùng spam-folder của Gmail.

Fix: Nếu là MPP, bạn ổn — pivot sang click rate làm tín hiệu engagement. Nếu là reputation, pause cohort lạnh và xây lại engagement với 2 tuần cadence chỉ-engaged.

"Gmail đẩy chúng tôi sang Promotions, không phải Inbox"

Thực tế: Promotions LÀ inbox với sender thương mại trên Gmail từ 2013. Recipient open mail tab Promotions vẫn tính là engagement tích cực. Đừng phí reputation đuổi tab primary; tối ưu engagement trong Promotions.

"DMARC report cho thấy bên thứ ba gửi mạo danh chúng tôi"

Gần như luôn: một sender transactional bị quên (Salesforce, Zendesk, receipt từ Stripe) trên domain bạn sở hữu. Fix: nhận diện từng cái, thêm include: của chúng vào SPF và CNAME của chúng vào DKIM, retest. Khi đã aligned, escalate DMARC lên p=reject.

"Chúng tôi bị listed trên Spamhaus"

Dừng gửi ngay lập tức. Nhận diện listing class (ZEN, SBL, XBL, PBL) tại spamhaus.org/lookup. PBL là policy-based và dễ fix; SBL là reputation; XBL liên quan đến malware.

Fix: request delisting qua form removal của Spamhaus, document corrective action (suppress mạnh tay, audit acquisition source, pause sending 24h). Đa số listing clear trong 24–72 giờ nếu bạn act nhanh và document. Re-listing clear chậm hơn.

"Bounce rate nhảy từ 1% lên 8%"

Hoặc một list import nhiễm active set, hoặc bạn gửi tới một cohort dormant dài và gặt hết địa chỉ chết trong một lần. Fix: pause sending, retroactively suppress các địa chỉ bounce, audit acquisition source gần đây nhất, chỉ gửi cho cohort engaged-90-ngày trong 2 tuần tiếp theo để bounce rate hồi.

"Outlook.com đẩy chúng tôi vào Junk trong khi Gmail ổn"

Reputation per-provider khác nhau. Outlook có xu hướng nghiêm hơn với domain mới; Gmail nặng engagement hơn. Fix: đăng ký Microsoft SNDS, nhận diện listing classification của IP, gửi một campaign slow-ramp chỉ tới recipient Outlook engaged, theo dõi SNDS chuyển xanh trong 2–4 tuần.

§12 · FAQ

FAQ deliverability email.

Tôi có cần SPF, DKIM, và DMARC, hay một cái là đủ?

Cả ba. SPF authenticate sending IP; DKIM authenticate body và header message; DMARC buộc From-header phải gắn với một trong hai và báo cho receiver biết phải làm gì khi alignment fail. Bất kỳ sender thương mại hiện đại nào không publish cả ba đều bị Gmail, Yahoo, và Outlook coi là khả nghi. Yêu cầu bulk-sender Gmail/Yahoo tháng 2/2024 đã biến đây thành sàn cứng, không còn là khuyến nghị.

Tôi có thể bỏ qua warmup nếu dùng IP chia sẻ trên SES hoặc SendGrid không?

Có — đó là giá trị của IP chia sẻ. IP production của SES được pre-warmed với reputation chín; bạn thừa hưởng nó. Warmup chỉ bắt buộc khi bạn chuyển sang dedicated IP (thường > 1M send/tháng mới justify) hoặc khi bạn dựng self-hosted Postal MTA trên một cloud instance mới.

Complaint rate bao nhiêu là tốt?

Dưới 0.1% (một trên ngàn) là khoẻ. Dưới 0.05% là xuất sắc. Trên 0.3% kéo dài và routing xuống cấp trên các provider trong 48 giờ. Amazon SES enforce trần cứng 0.1% complaint-rate — vượt là account bị tạm dừng để review.

Có cách nào test deliverability trước khi gửi campaign không?

Hai tool thực tế: một seed list (bạn duy trì tài khoản trên Gmail, Outlook, Yahoo, Apple, Proton; gửi campaign cho seed list trước; check inbox vs spam). Và third-party seed service (GlockApps, Mailtrap, Litmus) cho bạn placement report qua 30+ provider với giá $50–$100 mỗi send. Seed list miễn phí + chậm; third-party trả phí + toàn diện.

Sửa một vấn đề deliverability mất bao lâu?

Sai cấu hình authentication mất 1–4 giờ cộng DNS propagation. Reputation recovery mất 2–6 tuần gửi có kỷ luật — chỉ cohort engaged, cadence thấp, theo dõi metric xây lại. Listing Spamhaus clear trong 24–72 giờ nếu act nhanh. Đuôi dài nhất là phục hồi từ spike complaint-rate — spike nhanh, leo lên chậm.

Có nên dùng subdomain cho marketing email không?

Nên. Gửi marketing từ marketing.yourcompany.com hoặc news.yourcompany.com; transactional từ notify.yourcompany.com; mail công ty từ apex domain. Reputation là per-domain — cô lập marketing ngăn một spike complaint-rate từ campaign ảnh hưởng đến deliverability password-reset. Standard practice trên mọi sender SaaS lớn.

BIMI là gì và có đáng chi phí không?

BIMI hiển thị logo thương hiệu cạnh message trong các client hỗ trợ (Gmail, Yahoo, Apple, Fastmail). Chi phí $0 cho hosting SVG cộng $1,500/năm cho Verified Mark Certificate (VMC) nếu bạn muốn tick xanh Gmail. Open-rate lift 5–20% được document trong data pilot Yahoo và Mailchimp. Đáng với sender B2C > 100K subscriber; marginal ở dưới.

Apple Mail Privacy Protection (MPP) có phá open tracking không?

MPP route open-pixel qua proxy của Apple, nên mọi message Apple Mail trông như "opened" ngay khi được deliver. Open rate trở thành metric delivery cho reader Apple, không phải metric engagement. Pivot sang click rate, reply rate, và conversion làm tín hiệu engagement; coi open rate tổng như leading indicator đã shift baseline. Ước tính 30–40% open của consumer email đi qua MPP.

One-click unsubscribe có thực sự bắt buộc không?

Với sender > 5.000 message mỗi ngày tới Gmail hoặc Yahoo: có, từ tháng 2/2024. Yêu cầu kỹ thuật là một header List-Unsubscribe trỏ về một URL POST one-click (RFC 8058). Nút phải xử lý unsub không yêu cầu login hoặc trang confirm. Không đạt là cơ sở để bị route vào spam.

Tôi có thể cải thiện deliverability bằng cách đổi sending IP không?

Hiếm khi là nước cờ đúng. Đổi IP yêu cầu warmup mới (4–6 tuần volume xuống cấp) và vấn đề reputation gốc thường đến từ From-domain hoặc chất lượng list, không phải IP. Các ngoại lệ: listing RBL đã xác nhận trên IP mà không clear, hoặc migration ESP nơi ESP mới yêu cầu IP riêng. Giải bài toán chất lượng list và authentication trước.

Domain đã authenticated. Bounce được track. Reputation cấp inbox.

AcelleMail ship sẵn verification SPF/DKIM/DMARC, xử lý ARF feedback-loop, state machine IP warmup, và rate limiting per-server trong box. Mọi tuyên bố trong guide này đều map về một class trong app/Model/ hoặc app/Library/ của AcelleMail trong source tree.

Mua AcelleMail — $80 Thử Live Demo