Learn · For MSPs

Onboarding a client domain to p=reject

The value of a client DMARC service is mostly decided by whether you can run the same sequence every time. This is that sequence: the per-domain playbook for taking a client from "no record" (or an ancient p=none) to enforced p=reject without bouncing a single legitimate invoice. Timings assume a typical small business; complex senders stretch the middle, never the shape.

Week 0: audit, access, and the baseline record

Tell the client what happens next: one sentence manages every expectation — "Nothing about your mail changes yet; for the next few weeks we're building the list of everything that sends as your domain, then we'll lock it down in stages." The staged approach is a feature to sell, not a delay to apologize for.

Weeks 1–4: inventory the senders

Aggregate reports start arriving within a day or two, and the sender list builds fast. Give it two to four weeks — monthly processes like payroll and invoicing runs only reveal their senders when they fire. Expect surprises; every client has at least one:

Every legitimate sender gets a decision: align it, or migrate it off the domain. Nothing tightens until that list is empty.

Weeks 2–6: align every legitimate sender

Alignment work is sender-by-sender and mostly done inside each platform's settings: add missing SPF include: mechanisms (watching the 10-lookup limit — flatten before you exceed it), and turn on custom-domain DKIM signing wherever the platform offers it (Mailchimp's version is typical of the genre). Prefer DKIM alignment where you can get it — it survives forwarding, and it keeps working when the ESP's SPF story is structurally unalignable.

The exit test is visual: in the sender table, every legitimate source shows SPF or DKIM passing aligned, and everything still failing both is something you're content to block.

Weeks 4–10: tighten in stages

Now the walk — each step is a policy change (a button under hosted DMARC, a DNS edit otherwise), a waiting period, and a check that failure volume is only the mail you mean to kill. The full mechanics are in the policy guide; the MSP-relevant shape:

StageTypical dwellExit criteria
p=none2–4 weeksSender inventory complete; every legitimate sender aligned or migrated
p=quarantine; pct=251–2 weeksNo legitimate mail reported quarantined; no new unknown-but-real senders
p=quarantine (100%)2–4 weeksFailure volume is stable and entirely attributable to spoofing
p=rejectpermanent— arrival. Spoofed mail now bounces instead of reaching anyone's spam folder

Schedule policy steps early in the client's working week, tell their office manager a change is happening, and you'll hear about any real-mail casualty within hours instead of after the weekend. Casualties at this stage are almost always a sender the inventory missed — drop back one stage, align it, resume.

After reject: the service begins

Reaching p=reject ends the project and starts the product. Three things run forever:

Then the playbook resets to Week 0 — next domain in the book.

The playbook, with the manual steps removed

Hosted DMARC makes each policy step a button, reports parse themselves, senders arrive identified, and drift is watched daily — per client domain.

Canny Pigeons for MSPs