TLS-RPT Explained: SMTP TLS Reporting (RFC 8460), JSON Report Format, and MTA-STS Integration
Everything a domain owner needs to publish, ingest, and act on TLS-RPT reports — from the DNS TXT format and the JSON report schema to the result-type catalogue — with worked examples and integration guidance for MTA-STS and DANE deployments.
This reference is provided in English. TLS-RPT is specified in English-language RFCs (RFC 8460) and the canonical syntax (v=TLSRPTv1, _smtp._tls, application/tlsrpt+json, result-type values) does not translate. We keep the body in the source language so technical terms remain consistent with the specifications.
TL;DR
- TLS-RPT (SMTP TLS Reporting) is the standard for receiving daily JSON reports about inbound SMTP TLS sessions. Defined in RFC 8460. Companion to RFC 8461 (MTA-STS) and RFC 7672 (DANE for SMTP).
- TLS-RPT is a single DNS
TXTrecord at_smtp._tls.<domain>carryingv=TLSRPTv1; rua=<destination>. Destinations can bemailto:orhttps:, comma-separated. - Senders that support TLS-RPT aggregate one day of inbound TLS sessions per recipient policy and deliver a JSON report describing successful and failed session counts, the policy that was evaluated (MTA-STS / DANE / no-policy-found), and per-failure detail records (result-type, sending MTA, receiving MX, failure reason).
- The report is aggregate per policy per day, NOT per message. There is no TLS-RPT equivalent of a DMARC forensic / RUF report.
- TLS-RPT is the operational feedback
loop that makes
MTA-STS
and DANE deployable. Without TLS-RPT, an
enforcepolicy failure is invisible — mail simply does not arrive. - Result-type values like
certificate-host-mismatch,sts-policy-fetch-error, andstarttls-not-supportedpoint directly at the underlying defect; the report format is designed for actionable remediation.
1. What is TLS-RPT?
TLS-RPT (SMTP TLS Reporting) is an email transport-security observability standard that lets a receiving domain request daily JSON reports from sending mail servers describing the TLS health of inbound SMTP delivery. TLS-RPT is specified in RFC 8460 - SMTP TLS Reporting and is typically deployed as the companion to MTA-STS (RFC 8461) or DANE for SMTP (RFC 7672).
TLS-RPT closes the visibility gap in opportunistic and enforced SMTP TLS. Before TLS-RPT, a sending MTA that failed to negotiate TLS with a recipient (bad certificate, missing STARTTLS, MTA-STS policy fetch failure, DANE TLSA mismatch) would silently fall back to plaintext or refuse delivery, with no feedback channel to the recipient operator. TLS-RPT formalises a daily aggregate report so the recipient operator can see exactly which senders are seeing which failures and act on the underlying defect.
Critically, TLS-RPT is NOT a message- authentication mechanism — it does not describe SPF / DKIM / DMARC results, does not identify individual messages, and does not produce a pass / fail verdict for any specific delivery. It is purely a transport-layer observability standard: how was the TCP-level SMTP session, did the TLS handshake complete, did the recipient policy validate? Message authentication is the job of SPF, DKIM, and DMARC; TLS-RPT and MTA-STS are the parallel transport layer.
2. How TLS-RPT works, step by step
- The recipient domain publishes a DNS
TXTrecord at_smtp._tls.<domain>containingv=TLSRPTv1; rua=<destination>. The destination is either amailto:URI (where the JSON report arrives as an email attachment) or anhttps:URI (where the JSON is POSTed). Multiple destinations are comma-separated. - Sending MTAs that support TLS-RPT track every
outbound SMTP delivery attempt to the recipient
domain over a 24-hour window. For each session
they record the result (success or failure),
the policy that was evaluated (MTA-STS, DANE,
or no-policy-found), the failure
result-type(if applicable), and connection metadata (sending MTA, receiving MX, receiving IP). - At the end of the 24-hour window, the sending
MTA aggregates per recipient policy and
generates a JSON report — one
policies[]entry per policy seen, with summary counts of successful and failed sessions and afailure-details[]array describing each distinct failure shape (deduplicated byresult-type+receiving-mx-hostname+sending-mta-ipwith a per-shapefailed-session-count). - The reporting MTA delivers the JSON document to
the recipient's
rua=destination.mailto:deliveries arrive as email attachments with MIME typeapplication/tlsrpt+json(orapplication/tlsrpt+gzipwhen compressed) and a filename of the form<reporter>!<policy-domain>!<unix-start>!<unix-end>.json[.gz].https:deliveries are HTTP POST withContent-Type: application/tlsrpt+json. - The recipient operator (or an analyzer like DMARC Analyzer) ingests the report, indexes the per-policy session counts and per-failure result-type values into a database, and surfaces the trends in dashboards: total session counts per MX, per-failure breakdowns, per-sender deliverability, certificate-error regression alerts, and MTA-STS rollout health.
- Sending MTA support is the bottleneck for TLS-RPT coverage. Google Workspace, Microsoft 365, Yahoo, Comcast, and several large hosters emit TLS-RPT; many smaller senders do not. The reports cover the senders that do, which is enough signal to operate large-scale MTA-STS / DANE rollouts.
3. TLS-RPT DNS syntax
The TLS-RPT DNS record is a single
TXT record at the well-known label
_smtp._tls under the recipient domain.
_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"
Tag-by-tag anatomy of the TLS-RPT DNS record:
v=TLSRPTv1- Version tag. MUST appear first; receivers that
find a missing or invalid
v=ignore the record.TLSRPTv1is the only defined version at the time of writing. rua=<uri-list>- Reporting URI for aggregate reports. REQUIRED.
Comma-separated list of one or more URIs.
Supported schemes are
mailto:(the report arrives as an email attachment) andhttps:(the report is POSTed as the request body). If both schemes are needed, list them comma-separated:rua=mailto:a@example.com,https://reports.example.com/tlsrpt.
Cross-domain reporting destinations
(rua=mailto:reports@otherdomain.com)
require the destination domain to publish a
DNS TXT record at
example.com._report._smtp._tls.otherdomain.com
containing v=TLSRPTv1 to authorise
receiving reports for example.com.
Without that authorisation record, RFC 8460 §3 says
senders MAY refuse to deliver reports cross-domain
— preventing abuse where an attacker publishes a
TLS-RPT record pointing at a victim's mailbox.
4. TLS-RPT JSON report format
Reports are JSON documents (MIME type
application/tlsrpt+json) with the
structure defined in RFC 8460 §4. A minimal
example:
{
"organization-name": "Example Reporter Inc.",
"date-range": {
"start-datetime": "2026-05-17T00:00:00Z",
"end-datetime": "2026-05-17T23:59:59Z"
},
"contact-info": "tlsrpt-support@reporter.example",
"report-id": "2026-05-17T00:00:00Z_example.com",
"policies": [
{
"policy": {
"policy-type": "sts",
"policy-string": [
"version: STSv1",
"mode: enforce",
"mx: mail.example.com",
"max_age: 604800"
],
"policy-domain": "example.com",
"mx-host": "mail.example.com"
},
"summary": {
"total-successful-session-count": 12450,
"total-failure-session-count": 37
},
"failure-details": [
{
"result-type": "certificate-host-mismatch",
"sending-mta-ip": "203.0.113.5",
"receiving-mx-hostname": "mail.example.com",
"receiving-mx-helo": "mail.example.com",
"receiving-ip": "203.0.113.10",
"failed-session-count": 37,
"additional-information": "https://reporter.example/tlsrpt/incidents/12345",
"failure-reason-code": "X509: cert SAN does not include MX hostname"
}
]
}
]
}
Top-level field reference (RFC 8460 §4.1):
organization-name- Human-readable name of the reporting organisation. Free-form string.
date-range.start-datetime/date-range.end-datetime- ISO 8601 UTC timestamps for the 24-hour aggregation window the report covers.
contact-info- Free-form contact string (often an
mailto:or operator-portal URL) for follow-up questions. report-id- Reporter-assigned unique identifier for the document. Used to deduplicate redelivered reports.
policies[]- Array of per-policy aggregation entries — one for each distinct recipient policy seen during the window. The vast majority of reports contain exactly one entry.
Per-policy field reference (RFC 8460 §4.2):
policy.policy-type- One of
sts(MTA-STS policy evaluated),tlsa(DANE TLSA record evaluated), orno-policy-found(neither MTA-STS nor DANE — the session used opportunistic TLS or plaintext). policy.policy-string- Array of strings reproducing the policy that
was evaluated. For
sts, the per-line content of the MTA-STS policy file. Fortlsa, theTLSAresource-record values. Forno-policy-found, an empty array. policy.policy-domain- The recipient domain whose policy was evaluated.
policy.mx-host- The MX hostname (or wildcard pattern from the MTA-STS policy) involved.
summary.total-successful-session-count- Count of inbound SMTP sessions that succeeded under the policy during the window.
summary.total-failure-session-count- Count of inbound SMTP sessions that failed the
policy. Sum of all
failure-details[].failed-session-countentries in this policy. failure-details[]- Array of per-failure-shape records describing
each distinct way a session failed.
Deduplicated by
result-type+receiving-mx-hostname+sending-mta-ip.
5. TLS-RPT failure result-types
RFC 8460 §4.3 defines a small catalogue of
result-type values that classify TLS
failures. Each value maps to a specific deployment
defect the recipient operator can act on.
| result-type | What it means | Typical remediation |
|---|---|---|
starttls-not-supported |
The receiving MX did not advertise STARTTLS in its EHLO response. | Enable STARTTLS on every MX. Modern
Postfix / Exim / Microsoft Exchange
support it by default; check the
smtpd_tls_security_level
(Postfix) or equivalent
configuration. |
certificate-host-mismatch |
The leaf certificate's SAN does not cover the MX hostname. | Reissue the certificate with the MX
hostname in the SAN list. Most-common
cause: certificate covers only the
bare domain (example.com)
instead of the MX
(mail.example.com). |
certificate-expired |
The leaf or intermediate certificate
is past its
notAfter date. |
Renew the certificate. Automate
renewal with certbot,
acme.sh, or
infrastructure-as-code; calendar a
replacement at
notAfter - 30 days. |
certificate-not-trusted |
The certificate chain does not link to a trusted root in the sender's CA store. | Serve the full intermediate chain (not
just the leaf). Check with
openssl s_client -showcerts
-starttls smtp -connect <mx>:25. |
validation-failure |
A generic certificate validation error that does not fit a more specific category. | Inspect
additional-information
or failure-reason-code
fields for the reporter's specifics. |
sts-policy-fetch-error |
The sender could not retrieve the
MTA-STS policy file from
https://mta-sts.<domain>/.well-known/mta-sts.txt. |
Check that the HTTPS host serves the
policy file with a valid public-PKI
certificate, a 200 response, and
Content-Type: text/plain.
See
MTA-STS troubleshooting. |
sts-policy-invalid |
The retrieved MTA-STS policy file did not parse as a valid policy. | Re-check the policy file syntax:
version: STSv1 on the
first line, valid mode,
mx: entries, and a
positive integer
max_age. No BOM byte at
file head. |
sts-webpki-invalid |
The HTTPS host serving the MTA-STS policy file presented a certificate that failed public-PKI validation. | Replace the certificate on the
mta-sts.<domain>
vhost. Self-signed and private-PKI
certificates are rejected. |
tlsa-invalid |
The TLSA record for the MX evaluated against the presented certificate but did not match. | Reissue the TLSA record from the current certificate or public key hash. Common cause: certificate rotation without updating TLSA. |
dnssec-invalid |
DNSSEC validation failed for the recipient's DNS zone (which DANE requires). | Audit the zone's DNSSEC chain (DS record at the parent, signed RRSIGs in the zone). DNSSEC misconfigurations fail closed for DANE. |
dane-required |
DANE is required by sender policy but the recipient does not publish a TLSA record. | Either deploy DANE (publish DNSSEC- signed TLSA records under each MX) or confirm the sender treats DANE as opportunistic for your domain. |
certificate-error |
Generic certificate error category used by older reporters when the specific failure does not match a better-known result-type. | Inspect
additional-information;
otherwise treat as
certificate-not-trusted /
certificate-host-mismatch and start
there. |
6. TLS-RPT examples
6.1 Minimal TLS-RPT record (mailto destination)
_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"
The production-typical TLS-RPT record. Reports
arrive at tlsrpt@example.com as
email attachments with MIME type
application/tlsrpt+json (or
application/tlsrpt+gzip when
compressed).
6.2 HTTPS endpoint destination
_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=https://reports.example.com/tlsrpt"
Reports are POSTed to the URL as the HTTP request
body. The endpoint MUST accept
Content-Type: application/tlsrpt+json
and respond with 2xx. Useful when a JSON-ingesting
pipeline already exists and the operator would
rather not parse email.
6.3 Multiple destinations
_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tlsrpt@example.com,https://reports.example.com/tlsrpt"
Both destinations receive the report. Useful for redundancy (a transient outage on one channel does not lose the report) and for parallel ingestion by two systems (e.g. DMARC Analyzer and an internal SIEM).
6.4 Cross-domain reporting
# Recipient domain publishes:
_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:reports@other.example"
# Cross-domain authorisation at other.example:
example.com._report._smtp._tls.other.example. IN TXT "v=TLSRPTv1"
Required when rua= points at a mailbox
outside the recipient domain (e.g. a third-party
analytics service like DMARC Analyzer hosted under
a separate domain). Without the authorisation
record, RFC 8460 §3 says senders MAY refuse to
deliver reports cross-domain.
6.5 Companion MTA-STS deployment
_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"
_mta-sts.example.com. IN TXT "v=STSv1; id=20260518T120000"
# https://mta-sts.example.com/.well-known/mta-sts.txt
version: STSv1
mode: testing
mx: mail.example.com
max_age: 86400
The recommended initial deployment: publish
TLS-RPT and MTA-STS at the same time, set MTA-STS
to mode: testing for the first 4-8
weeks while reviewing TLS-RPT reports, then flip
to mode: enforce once the reports
show zero unexpected failures.
6.6 Sample failure-details (host mismatch)
"failure-details": [
{
"result-type": "certificate-host-mismatch",
"sending-mta-ip": "203.0.113.5",
"receiving-mx-hostname": "mx1.example.com",
"receiving-ip": "203.0.113.42",
"failed-session-count": 18,
"additional-information": "Certificate CN=example.com, SAN does not include mx1.example.com",
"failure-reason-code": "X509: SAN mismatch"
}
]
A canonical actionable failure: the certificate
on mx1.example.com covers the bare
domain but not the MX hostname itself. Reissue
the certificate with the MX in the SAN list and
the failure clears on the next reporting window.
7. TLS-RPT best practices
- Publish TLS-RPT at the SAME TIME you
publish MTA-STS or DANE. Without
TLS-RPT, an
enforce-mode policy failure is invisible — mail simply does not arrive and there is no report to correlate the drop against. - Use a dedicated mailbox for
rua=mailto:. A separatetlsrpt@example.comaddress keeps reports out of operator inboxes and makes it easy to point an IMAP-fetcher (DMARC Analyzer supports IMAP + Microsoft Graph) at exactly the right mailbox. - Pipe reports into an analyzer. TLS-RPT reports are aggregate JSON — trying to read them by eye scales to roughly one or two reports per day. Past that point, an automated ingestion + dashboard pipeline (DMARC Analyzer, Postmark TLS-RPT, internal SIEM) is the only viable option.
- Compress or HTTPS-stream large
reports. Reports from large senders
(Google, Microsoft) for high-volume domains
can exceed 1MB uncompressed. Most reporters
gzip-compress the attachment by default
(
application/tlsrpt+gzip); HTTPS ingestion sidesteps mail-attachment-size limits entirely. - Authorise cross-domain destinations
explicitly. When
rua=mailto:points at a third- party mailbox, publish the<policy-domain>._report._smtp._tls.<reporter-domain>authorisation record at the destination's domain. Without it, senders may silently refuse to deliver. - Treat
no-policy-foundas a baseline, not a failure. If you have not yet published MTA-STS or DANE,policy-type: no-policy-foundentries are expected — they document opportunistic-TLS session counts and are useful as a coverage baseline. Failure result-types (starttls-not-supported,certificate-*) inside ano-policy-foundpolicy still warrant attention. - Watch session-count trends, not
absolute numbers. A sudden drop in
total-successful-session-countfrom one reporter is a more reliable regression signal than absolute counts — absolute counts depend on the sender's message volume, which fluctuates. - Alert on new failure result-types,
not on raw counts. A
certificate-host-mismatchappearing for the first time is a deploy-time regression worth a page; a long-running 1-2 failure/day baseline from misconfigured outlier senders is noise. - Keep TLS-RPT records short. TXT records over 255 characters get split across multiple strings, which most parsers handle but some legacy resolvers do not. A well-formed TLS-RPT record is under 100 characters even with two destinations.
- Retain reports for at least 1 year. Annual audits, MTA-STS rollout retros, and certificate-incident postmortems all benefit from historical context. DMARC Analyzer stores TLS-RPT alongside DMARC reports indefinitely.
8. Common TLS-RPT mistakes
- Publishing MTA-STS without
TLS-RPT. The most common mistake.
MTA-STS at
enforcewith no feedback channel means the operator only learns about failures from end-user "missing email" complaints. Always pair MTA-STS with TLS-RPT. - Pointing
rua=at an unmonitored mailbox. Daily JSON reports queue up unread and the operator never sees the failures. Use a mailbox with an automated ingester or alerting. - Forgetting the cross-domain
authorisation record. When
rua=mailto:tlsrpt@analyzer.examplepoints at a separate domain and that domain does not publish the<policy-domain>._report._smtp._tlsauthorisation, senders silently refuse to deliver and TLS-RPT looks broken. - Trying to read failure result-types
without RFC 8460 §4.3 open. The
result-type catalogue is closed — terms like
sts-webpki-invalidare precise and decode to a specific defect. Guessing the meaning from the name leads operators down the wrong remediation path. - Confusing TLS-RPT with DMARC RUA. Both are aggregate-XML/JSON reports about email, but they describe different things: DMARC RUA = message authentication results; TLS-RPT = transport TLS results. Operators sometimes confuse the two when reading dashboards.
- Using
http:(nothttps:) for therua=URI. RFC 8460 requires the destination scheme be eithermailto:orhttps:. Plain HTTP destinations are rejected by compliant senders. - Expecting per-message detail. TLS-RPT is aggregate per policy per day per failure-shape. It does NOT identify individual messages and does not include message-ID or recipient-address fields. Operators looking for per-message detail should look at SMTP server logs, not TLS-RPT.
- Treating TLS-RPT as a security control. TLS-RPT is observability, not enforcement. The control is MTA-STS or DANE; TLS-RPT just reports on its outcomes.
9. TLS-RPT troubleshooting
- I published a TLS-RPT record but no reports are arriving
- Confirm the DNS record exists with
dig +short txt _smtp._tls.<domain>and starts withv=TLSRPTv1;. Reports usually take 24-72 hours to start arriving from a given sender (the first daily window has to complete). If therua=destination is cross-domain, verify the<policy-domain>._report._smtp._tls.<reporter-domain>authorisation record is also published. - Reports arrive from Google but not from Microsoft 365 (or vice versa)
- Sender coverage varies. Google Workspace, Microsoft 365, Yahoo, Comcast, and major hosters emit TLS-RPT; many smaller senders do not yet. This is expected and not a deployment defect — the reports you DO get are still actionable.
- The JSON in the report won't parse
- Some reporters send the report
gzip-compressed with MIME type
application/tlsrpt+gzip. The attachment is the gzip stream, not the JSON directly. Decompress first (gunzipor a library's gzip decoder), then parse JSON. DMARC Analyzer'sTlsRptParserhandles both forms transparently. - Filenames look like <reporter>!<policy-domain>!<unix-start>!<unix-end>.json.gz — is that right?
- Yes. RFC 8460 §5.1 defines the filename
convention. The four exclamation-separated
fields are reporter-domain,
policy-domain, Unix timestamp of the
start-of-window, and Unix timestamp of the
end-of-window. The trailing
.jsonor.json.gzreflects the file format. - Reports show only
policy-type: no-policy-foundentries - You have not yet published MTA-STS or DANE,
so reporters log opportunistic-TLS sessions
under
no-policy-found. To getsts/tlsaentries, deploy MTA-STS or DANE. TLS-RPT remains useful in theno-policy-foundbaseline form — it documents what session counts your domain is actually receiving. - A specific failure-details entry has
failed-session-countof 1 and keeps reappearing - A single-session-count entry that recurs
across days indicates a low-volume sender
with a persistent defect (often an obscure
forwarding service or a sandbox MTA). The
sending-mta-ipfield is the IP address (IPv4 or IPv6) of the sending MTA that attempted the TLS session; identify the provider via reverse-DNS / WHOIS on that IP (it is not a HELO/EHLO hostname and not the From: domain), then reach out via the WHOIS contact or anabuse@address if the defect is theirs to fix. - The report claims a
sts-policy-fetch-errorbut my policy file is accessible - Re-test from a sender's vantage point with
curl -v --resolve "mta-sts.<domain>:443:<ip>" https://mta-sts.<domain>/.well-known/mta-sts.txtagainst each of your authoritative IPs. Geo-routing or CDN cache misses can make the file reachable from your test client and unreachable from the sender. Also check the TLS certificate chain onmta-sts.<domain>matches what reporters report.
10. Frequently Asked Questions
- What is TLS-RPT?
- TLS-RPT (SMTP TLS Reporting, RFC 8460) is a DNS-based mechanism that lets a domain owner request and receive daily reports about TLS connection successes and failures for inbound mail. Reporting senders aggregate one day of TLS sessions per recipient policy and deliver a JSON document describing successful session counts, failed session counts, the policy that was evaluated (MTA-STS or DANE), and per-failure detail records (result type, sending MTA, receiving MX, failure reason).
- What does a TLS-RPT DNS record look like?
- A TLS-RPT DNS record is a TXT record at
_smtp._tls.<domain>containing two tags:v=TLSRPTv1andrua=<destination>. A typical record is:_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"— declaring the TLS-RPT version and the destination address that should receive daily aggregate reports. Multiplerua=destinations can be combined comma-separated, and HTTPS endpoints (rua=https://...) are also supported. - How is TLS-RPT different from DMARC RUA reports?
- DMARC RUA reports (RFC 7489) describe message-authentication results — which messages passed or failed SPF, DKIM, and DMARC alignment. TLS-RPT reports (RFC 8460) describe transport-layer results — which inbound SMTP sessions succeeded or failed TLS negotiation against an MTA-STS or DANE policy. The two are independent: TLS-RPT tells you about the network connection, DMARC tells you about message authentication. Both are operational feedback loops that need to be enabled before you can audit your deployment.
- Which result-type values appear in TLS-RPT failure-details?
- RFC 8460 defines a small set of
result-typevalues that classify why a TLS session failed:starttls-not-supported,certificate-host-mismatch,certificate-expired,certificate-not-trusted,validation-failure,tlsa-invalid,dnssec-invalid,dane-required,sts-policy-fetch-error,sts-policy-invalid,sts-webpki-invalid, and a genericcertificate-error. Each value points at a specific deployment defect — for example,certificate-host-mismatchmeans the leaf certificate SAN does not cover the MX hostname;sts-policy-fetch-errormeans the sender could not retrieve the MTA-STS policy file at the/.well-knownURL. - Where is a TLS-RPT report delivered?
- Reporting senders look up the recipient
domain's
_smtp._tlsTXT record, parse therua=destination, and deliver the daily JSON report there. Formailto:destinations, the report arrives as an email attachment (application/tlsrpt+jsonorapplication/tlsrpt+gzip) with a filename of the form<reporter-domain>!<policy-domain>!<unix-start>!<unix-end>.json[.gz]. Forhttps:destinations, the report is POSTed as the request body withContent-Type: application/tlsrpt+json. - Do I need MTA-STS or DANE before deploying TLS-RPT?
- No — TLS-RPT is useful on its own as a
transport-security observability tool.
Without an MTA-STS or DANE policy, reports
use
policy-type=no-policy-foundand document opportunistic-TLS session counts plus any handshake failures. That data is still valuable for spotting senders that are dropping back to plaintext, certificate problems on your MX hosts, or sudden drops in TLS coverage. TLS-RPT becomes more actionable when paired with MTA-STS / DANE because the failure-details then describe policy-validation outcomes the operator can correct. - Can DMARC Analyzer ingest TLS-RPT reports?
- Yes. DMARC Analyzer includes a TLS-RPT
parser
(
includes/TlsRptParser.php) that ingests JSON and GZIP-compressed TLS-RPT reports via the upload page or via IMAP / Microsoft Graph mailbox fetch. Reports are stored alongside DMARC aggregate reports in thedmarc_tls_reportstable and surface in the dashboard as policy success rates, failure breakdowns by result-type, and per-MX session histograms — so you can audit MTA-STS rollout in the same UI as DMARC alignment.
12. Ingest your TLS-RPT reports now
DMARC Analyzer's TLS-RPT parser
(includes/TlsRptParser.php) ingests
JSON and GZIP-compressed reports via the upload
page or via the same IMAP / Microsoft Graph
mailbox-fetch pipeline used for DMARC aggregate
reports. Reports surface in the dashboard as
per-policy success rates, failure breakdowns by
result-type, and per-MX session histograms so
you can audit MTA-STS / DANE rollout health in
one place. The Domain Security Checker also
performs live _smtp._tls lookups
against any domain to verify a TLS-RPT record is
syntactically valid and the
rua= destination is reachable.