SendOps

Guide

DMARC monitoring when you send through Amazon SES.

What aggregate reports actually contain, why SES cannot answer “who sends as my domain”, why an SES IP address proves nothing and a DKIM selector proves everything, and how to reach enforcement with evidence instead of nerve.

Updated September 1, 2026 · 15 min read

The raw material

What an aggregate report is, and why the XML is not the answer

Domain-based Message Authentication, Reporting, and Conformance (DMARC) is a record you publish in DNS. It tells receiving mail providers what to do with mail claiming to come from your domain that fails authentication, and it names an address where those providers should send reports about what they saw. That address lives in the rua tag, and the reports it collects are called aggregate reports.

An aggregate report is a gzipped XML file, usually one per reporting organisation per day. Inside it, each record describes a sending IP address, how many messages that address sent, the Sender Policy Framework (SPF) and DomainKeys Identified Mail (DKIM) results, whether either of those results aligned with the domain in the visible From address, and the disposition the receiver applied. That last field is what actually happened to the mail.

Notice what is not in there. There are no recipient addresses, no subject lines, and no message content. Aggregate reports are counting data, which is exactly why they are safe to collect at scale.

The problem with reading them yourself is not the format. It is that the format answers the wrong question. A file of IP addresses tells you that 3,412 messages from 34 addresses failed DKIM yesterday. It does not tell you that 31 of those addresses are one European marketing platform your events team signed up for, that two are a university mail relay forwarding your newsletter, and that the last one is your own SES traffic from a region where somebody forgot to publish the DKIM records.

Turning the first sentence into the second is the entire job. It means grouping addresses by provider fingerprint and network so rotating IPs stay one row, joining SPF and DKIM results into an alignment story, separating forwarding from unauthorised sending, and doing it again every day as the sources change.

Scope

SES tells you about SES. DMARC tells you about your domain.

Amazon SES gives you excellent data about the mail you sent through Amazon SES. Sends, deliveries, bounces, complaints, opens, clicks — all of it accurate, all of it scoped to your own sending path. That scope is the limitation. SES has no opinion about a message it never handled.

Your domain is almost certainly used by more than SES. A typical company discovers, on reading its first month of reports, that its From domain is in use by Google Workspace or Microsoft 365 for everyday staff mail, by a help-desk product, by a billing or invoicing system, by a scheduling or webinar tool somebody in marketing bought, by mailing lists and personal forwarding rules, and sometimes by a service a departed employee configured years ago.

Every one of those senders affects your DMARC result, because DMARC evaluates the domain in the visible From address rather than the platform behind it. You cannot publish an enforcement policy safely while any of them is unaccounted for, and no SES-side metric will ever show them to you.

One scope limit worth stating plainly

DMARC covers the exact domain in the visible From address, and subdomains through the sp tag. It does nothing about lookalike registrations — a domain that merely resembles yours is a different domain, and no DMARC policy of yours applies to it. Detecting and acting on those is a separate category of product.

Evidence

An SES IP address proves nothing. A DKIM selector proves everything.

The instinct when reviewing reports on SES is to check whether the sending IP belongs to Amazon SES, and to treat a match as proof the mail was yours. It is not proof. SES shared IP ranges are shared across the whole service, so a match tells you the message came from SES — not from your SES account.

That distinction matters more than it sounds. Anyone can open an AWS account, verify a domain they control, and send mail from the same address ranges you use. If they put your domain in the From address, their message appears in your reports, from an IP that looks exactly as legitimate as your own. Network ownership cannot separate the two.

Cryptography can. When SES signs a message with Easy DKIM, it uses a key pair whose public half is published under selectors in your DNS. A signature that validates against one of your selectors could only have been produced by a key your domain controls. That is a positive identity claim about the message rather than a guess about the network it travelled over.

Evidence What it tells you Good enough to confirm?
IP in an SES range The message came from Amazon SES, from any customer No
SPF pass on amazonses.com The envelope sender was Amazon's, so it cannot align with your domain No
SPF pass on your MAIL FROM subdomain The envelope sender is yours and aligns, but the path breaks on forwarding Partly
DKIM pass on your selector The message was signed by a key only your domain publishes, and the signature survives forwarding Yes

There is a second reason selector evidence matters. Without it, your own SES mail that is failing alignment gets filed alongside genuinely unknown senders, and a configuration mistake starts to look like an attack. With it, that traffic is correctly labelled as yours and broken — which is a fix, not an investigation.

Keep the same discipline in the other direction. An unknown source is a source that still needs a decision. Most of them turn out to be a forgotten SaaS product, a shared sending pool, or ordinary forwarding, and treating the first month's unknowns as adversaries wastes the month.

Diagnosis

The seven failures SES senders actually hit

“DMARC failed” is not a diagnosis. These are the specific causes behind most failing traffic on an SES domain, and what each one asks you to do about it. Note that the last two have no DNS fix at all, which is an honest answer rather than a gap.

Missing or partial DKIM CNAME records

SES Easy DKIM gives you three CNAME records. If any of them is missing, the domain never signs, and every message depends on SPF alone. The report symptom is a large first-party source with a DKIM result of none.

Next action: Publish all three CNAMEs exactly as SES issued them and re-check the identity.

Custom MAIL FROM not configured

Without a custom MAIL FROM domain, SES uses an amazonses.com envelope sender. SPF then authenticates Amazon's domain rather than yours, so it can never align, and DMARC ignores the pass.

Next action: Configure a MAIL FROM subdomain and publish the MX and TXT records SES issues for it.

Custom MAIL FROM DNS broken

The subdomain was configured once and the records were later edited, moved, or lost during a DNS migration. SES falls back to its default behaviour quietly, and SPF alignment disappears without any error in the console.

Next action: Re-check the live MX and TXT records for the MAIL FROM subdomain, not the values you remember publishing.

Google Workspace or Microsoft 365 signing as itself

Both platforms sign outbound mail by default with their own domain rather than yours. The mail is legitimate and it authenticates, but the signature does not align with your From domain, so DMARC fails.

Next action: Enable DKIM for your own domain in the Google or Microsoft admin console and publish the selector records it generates.

A confirmed third party not authenticating as you

A support desk, billing system, or marketing tool sends as your domain using only its own authentication. This is the most common source of unfixable-looking failures, and it is a vendor configuration task rather than a DNS one.

Next action: Ask the vendor for domain-level DKIM signing, and publish the selector they give you.

Ordinary forwarding

A recipient forwards your message, or a mailing list relays it. SPF breaks in transit because the forwarding server is not in your policy. This is normal internet behaviour and not an attack.

Next action: Nothing to publish. An aligned DKIM signature survives forwarding, which is why DKIM alignment is the goal on SES.

A relay that breaks alignment

A security gateway, appliance, or archiving relay modifies headers or the message body in transit and invalidates the DKIM signature. The message is yours, it left SES correctly, and it still fails DMARC at the receiver.

Next action: Reconfigure the relay to preserve signed content, or exclude the path from the alignment target and account for it in the impact figure.

Two habits make this list much faster to work through. Check live DNS rather than trusting the report, because a report describes yesterday and a record may have been fixed since. And fix DKIM before SPF: an aligned DKIM signature satisfies DMARC on its own and survives forwarding, so it removes whole categories of failure that no SPF change can. The SES setup guide walks through publishing both, and the SES deliverability guide covers how authentication sits alongside reputation.

Enforcement

From p=none to p=reject, one justified step at a time

The policy ladder has three rungs. p=none asks for reports and changes nothing about delivery. p=quarantine asks receiving providers to treat failing mail as suspicious, usually by filing it as spam. p=reject asks them to refuse failing mail outright during the SMTP conversation.

Nothing in your own infrastructure enforces any of this. The receiving provider acts, because you asked it to in DNS. That also means the blast radius of a premature move lands on your legitimate mail, not on the attacker, which is why every rung should be earned.

Here is the evidence worth having before you tighten:

Report coverage

Enough days of report history, from enough distinct reporting organisations, and enough message volume that the sample means something. A quiet week is not proof of safety.

A reviewed source list

Every meaningful source either confirmed as yours or rejected as not yours. Rejecting a source records the decision — it does not block the sender or silence future alerts.

A measured impact preview

How many legitimate messages per day the stricter policy would have affected over the measured window, stated as a number rather than a percentage. Percentages hide small but important streams.

An honest exclusions list

Which traffic the figure excludes and why: rejected sources, relay-broken mail, and unavoidable forwarding. Excluding them is defensible; hiding them is not.

A lowered TTL and a rollback record

Drop the time-to-live on the DMARC record a day before you tighten, and keep the previous record verbatim so republishing it is a paste rather than a reconstruction.

A watch window

Roughly a fortnight after the change, comparing before and after while ignoring report-lag days, ending in one of three verdicts: hold here, advance, or roll back.

Two details that are easy to miss. Subdomains inherit your policy unless you set the sp tag, so decide deliberately whether the subdomain that sends your invoices is ready for the same treatment as the parent. And if your published record is ever weaker than the policy receivers were recently reporting, something changed it — a DNS migration, a registrar template, a well-meaning colleague — and that regression is worth catching quickly.

Whatever tool you use, you publish the record. A DMARC product can generate the exact value, show a field-level difference against what is live, and measure what the change would cost. Making the change in your DNS provider stays with you.

A separate signal

TLS reporting answers a different question

SMTP TLS Reporting (TLS-RPT) is a second reporting standard, and it is easy to conflate with DMARC because both arrive as scheduled reports from receiving providers. They measure different things. DMARC reports whether a message was authenticated as coming from your domain. TLS-RPT reports whether sending systems could establish a secure connection to the mail servers your domain publishes.

Keep the two apart in your head and in your alerting. A domain can pass DMARC on every message and still have a certificate or policy problem that TLS reports would have shown. A TLS failure does not mean a message failed DMARC, and it should not be counted against your authentication trend.

For SES senders, TLS-RPT is mostly about the inbound side of your domain, so it is worth watching even though it says nothing about your outbound campaigns.

The Shortcut

Or: run this workflow inside your SES control plane

Everything above can be done by hand, and plenty of teams do it. The reason we built DMARC monitoring into SendOps is that the SES half of the work is the half a general-purpose DMARC tool cannot see. SendOps already knows your verified identities and DKIM selectors, so it can prove which traffic is yours.

Your SES mail, positively identified

First-party sending is confirmed by selector, not by IP range, so your own misaligned mail is classified as needing a fix rather than filed with unknown senders.

Every other sender, in the same view

Google Workspace, Microsoft 365, SaaS tools, forwarders, and unknown sources are grouped and ranked next to your SES traffic, because DMARC is a domain question rather than a platform one.

Named diagnoses with live DNS checks

The failures listed above are detected by name and re-checked against live DNS, so you are not acting on a record that was already fixed yesterday.

Readiness measured in messages per day

The impact preview, exclusions, rollback record, and post-change watch window are part of the workflow — see SendOps DMARC monitoring for how the readiness card works.

Three boundaries are deliberate and will not change. SendOps never publishes DNS, never advances your policy, and never blocks a sender — rejecting a source records a decision, and it is a stricter DMARC policy that asks receiving providers to act. SendOps accepts aggregate reports only and refuses forensic reports, because those can carry recipient addresses, subject lines, and sometimes message content to an address published in public DNS, and the major mailbox providers generally do not send them anyway.

If you are still choosing a tool, the category roundup profiles the alternatives, including the cases where one of them fits better than we do.

FAQ

DMARC on Amazon SES, answered

Does Amazon SES send me DMARC reports?

No. Aggregate reports are generated by receiving mail providers such as Google, Microsoft, and Yahoo, and sent to whatever address you publish in the rua tag of your DMARC record. SES has no part in producing or delivering them. This is why DMARC gives you a view of senders that SES itself cannot see.

Do DMARC reports cover only the mail I send through SES?

No, and that is the point of them. A report covers every message a provider saw using your domain in the visible From address, whatever sent it. That routinely includes Google Workspace, Microsoft 365, help-desk and billing tools, mailing lists and forwarders, and occasionally mail nobody at your company authorised.

Why does my SES mail fail DMARC when SPF passes?

Almost always because of the default MAIL FROM domain. Unless you configure a custom MAIL FROM, SES uses an amazonses.com envelope sender, so SPF authenticates amazonses.com rather than your domain, and DMARC does not accept that as alignment. Fix it by configuring a custom MAIL FROM subdomain with the MX and TXT records SES gives you. An aligned DKIM signature also satisfies DMARC on its own, and unlike SPF it survives forwarding.

Can I tell my own SES mail apart from a message spoofing my domain?

Not from the sending IP address, because SES shared IP ranges are used by every SES customer, and an attacker who sends through their own SES account appears in the same ranges you do. The evidence that separates them is the DKIM signature: a message signed with a selector published in your DNS was signed by a key only your domain controls. Any DMARC review on SES should be anchored on selector evidence rather than on network ownership.

How do I know it is safe to move from p=none to p=quarantine on SES?

You need three things: enough report history from enough reporting providers to trust the sample, a source list where every meaningful sender has been reviewed and either confirmed or rejected, and a measured impact figure that says how many legitimate messages per day the stricter policy would have affected. If that figure is zero, or it is only unavoidable forwarded mail your team has consciously accepted, the move is defensible. Lower the DMARC record TTL a day beforehand, keep the previous record so you can republish it, and watch the next fortnight before going further.

Does turning on DMARC monitoring change how SES delivers my mail?

No. Publishing a p=none record with a reporting address asks receiving providers to send you reports while continuing to handle your mail exactly as they already do. It changes nothing in SES, adds no headers, and touches no sending path. Delivery only changes when you deliberately publish p=quarantine or p=reject.

Get Started

See every sender using your domain

SendOps reads your aggregate reports, proves which traffic came from your own SES identities, diagnoses the rest, and measures what a stricter policy would affect. You publish every DNS change yourself.