Starting a DMARC programme safely
Publish p=none with rua reporting, read aggregate reports for several weeks to inventory legitimate senders, then move to quarantine and reject in stages.
Fetches and explains a domain's DMARC record: policy, alignment, pct, rua/ruf.
Fetches the DMARC TXT record and validates policy, alignment and reporting tags.
Fetches and explains a domain's DMARC record: policy, alignment, pct, rua/ruf.
example.com
v=DMARC1; p=reject; pct=100; rua=mailto:dmarc@example.com — Policy: reject
Each tag is explained in plain language.
The policy tag tells receivers what to do with failing mail.
Your input is sent to YAS infrastructure because the tool requires server-side processing or public network queries. Input is not stored.
curl -X POST "https://yas.sh/api/v1/tools/dmarc-inspector" \
-H "Content-Type: application/json" \
-d '{"input":"example.com"}'const res = await fetch("https://yas.sh/api/v1/tools/dmarc-inspector", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"input": "example.com"
}),
});
const data = await res.json();import requests
r = requests.post("https://yas.sh/api/v1/tools/dmarc-inspector", json={"input":"example.com"})
data = r.json()| Field | Type | Required | Description |
|---|---|---|---|
| input | string | Yes | Domain, e.g. example.com |
{ "result": { "found": true, "record": "v=DMARC1; p=reject; rua=mailto:dmarc@example.com", "policy": "reject", "subdomainPolicy": null, "pct": 100, "adkim": "r", "aspf": "r", "rua": ["dmarc@example.com"], "valid": true, "issues": [] } }Fetch and validate _dmarc.<domain> TXT: policy badge, alignment, pct, rua/ruf.
400 VALIDATION_ERROR — invalid input or unsupported option.413 PAYLOAD_TOO_LARGE — input exceeds the 64 KB limit.429 RATE_LIMIT_EXCEEDED — rate limit exceeded (60 req/min).DMARC ties SPF and DKIM to the domain a user actually sees. A TXT record at _dmarc.<domain> declares a policy (p=none, quarantine or reject), optional reporting addresses (rua for aggregate, ruf for forensic), a percentage rollout and alignment modes. A message passes DMARC when SPF or DKIM passes and the corresponding domain aligns with the From: header domain.
Alignment is the mechanism that gives DMARC its value. Relaxed alignment accepts an organisational-domain match (mail.example.com aligns with example.com); strict requires exact equality. Without alignment an attacker could pass SPF using their own domain while displaying yours in From:, which is exactly the gap DMARC closes and neither SPF nor DKIM closes alone.
Publish p=none with rua reporting, read aggregate reports for several weeks to inventory legitimate senders, then move to quarantine and reject in stages.
Aggregate reports reveal every source sending as your domain — usually including a forgotten CRM, a monitoring system and a partner's mail server.
Displaying a brand logo in supporting mail clients requires DMARC at quarantine or reject. There is no shortcut.
A sender that passes SPF but fails alignment is the classic cause: authenticated under the provider's domain rather than yours.
What this tool deliberately does not do, and where it will disagree with other implementations.