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 TXT record at _smtp._tls.<domain> carrying v=TLSRPTv1; rua=<destination>. Destinations can be mailto: or https:, 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 enforce policy failure is invisible — mail simply does not arrive.
  • Result-type values like certificate-host-mismatch, sts-policy-fetch-error, and starttls-not-supported point 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

  1. The recipient domain publishes a DNS TXT record at _smtp._tls.<domain> containing v=TLSRPTv1; rua=<destination>. The destination is either a mailto: URI (where the JSON report arrives as an email attachment) or an https: URI (where the JSON is POSTed). Multiple destinations are comma-separated.
  2. 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).
  3. 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 a failure-details[] array describing each distinct failure shape (deduplicated by result-type + receiving-mx-hostname + sending-mta-ip with a per-shape failed-session-count).
  4. The reporting MTA delivers the JSON document to the recipient's rua= destination. mailto: deliveries arrive as email attachments with MIME type application/tlsrpt+json (or application/tlsrpt+gzip when compressed) and a filename of the form <reporter>!<policy-domain>!<unix-start>!<unix-end>.json[.gz]. https: deliveries are HTTP POST with Content-Type: application/tlsrpt+json.
  5. 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.
  6. 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. TLSRPTv1 is 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) and https: (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), or no-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. For tlsa, the TLSA resource-record values. For no-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-count entries 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 separate tlsrpt@example.com address 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-found as a baseline, not a failure. If you have not yet published MTA-STS or DANE, policy-type: no-policy-found entries are expected — they document opportunistic-TLS session counts and are useful as a coverage baseline. Failure result-types (starttls-not-supported, certificate-*) inside a no-policy-found policy still warrant attention.
  • Watch session-count trends, not absolute numbers. A sudden drop in total-successful-session-count from 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-mismatch appearing 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 enforce with 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.example points at a separate domain and that domain does not publish the <policy-domain>._report._smtp._tls authorisation, 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-invalid are 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: (not https:) for the rua= URI. RFC 8460 requires the destination scheme be either mailto: or https:. 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 with v=TLSRPTv1;. Reports usually take 24-72 hours to start arriving from a given sender (the first daily window has to complete). If the rua= 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 (gunzip or a library's gzip decoder), then parse JSON. DMARC Analyzer's TlsRptParser handles 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 .json or .json.gz reflects the file format.
Reports show only policy-type: no-policy-found entries
You have not yet published MTA-STS or DANE, so reporters log opportunistic-TLS sessions under no-policy-found. To get sts / tlsa entries, deploy MTA-STS or DANE. TLS-RPT remains useful in the no-policy-found baseline form — it documents what session counts your domain is actually receiving.
A specific failure-details entry has failed-session-count of 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-ip field 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 an abuse@ address if the defect is theirs to fix.
The report claims a sts-policy-fetch-error but 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.txt against 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 on mta-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=TLSRPTv1 and rua=<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. Multiple rua= 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-type values 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 generic certificate-error. Each value points at a specific deployment defect — for example, certificate-host-mismatch means the leaf certificate SAN does not cover the MX hostname; sts-policy-fetch-error means the sender could not retrieve the MTA-STS policy file at the /.well-known URL.
Where is a TLS-RPT report delivered?
Reporting senders look up the recipient domain's _smtp._tls TXT record, parse the rua= destination, and deliver the daily JSON report there. For mailto: destinations, the report arrives as an email attachment (application/tlsrpt+json or application/tlsrpt+gzip) with a filename of the form <reporter-domain>!<policy-domain>!<unix-start>!<unix-end>.json[.gz]. For https: destinations, the report is POSTed as the request body with Content-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-found and 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 the dmarc_tls_reports table 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.

Check my TLS-RPT record Sign up — Free plan