Practice · TLS-RPT

Understanding TLS-RPT: reading failure reports properly

TLS-RPT (RFC 8460) gives you daily JSON reports about TLS problems between sending and receiving mail servers — if you know how to read them.

The problem: TLS errors otherwise stay invisible

By default, SMTP tries to set up a TLS connection between the sending and receiving mail server. If that fails — expired certificate, weak ciphers, downgrade attack — the server usually falls back to an unencrypted connection. The mail arrives, but in plain text. You would never find out.

TLS-RPT (TLS Reporting, RFC 8460) solves this. You explicitly ask receiving servers in a DNS record to report such incidents to you. Reports arrive daily as JSON files via email — directly actionable, or aggregated by Mailantis.

The DNS record

TLS-RPT is enabled via a TXT record at the subdomain _smtp._tls. Example:

_smtp._tls.example.com · TXTv=TLSRPTv1; rua=mailto:[email protected]

The key fields:

If you use Mailantis, you receive a dedicated rua address that you simply forward reports to — we aggregate the JSON files into readable overviews.

The JSON structure

A TLS-RPT report is a JSON file, packaged as application/tlsrpt+gzip. Unpacked, a typical report looks like this:

Example report{
  "organization-name": "Google Inc.",
  "date-range": {
    "start-datetime": "2026-05-07T00:00:00Z",
    "end-datetime":   "2026-05-07T23:59:59Z"
  },
  "contact-info": "[email protected]",
  "report-id": "2026-05-07T00:00:00Z_example.com",
  "policies": [
    {
      "policy": {
        "policy-type":   "sts",
        "policy-string": ["version: STSv1", "mode: enforce", "mx: mail.example.com", "max_age: 86400"],
        "policy-domain": "example.com",
        "mx-host":       ["mail.example.com"]
      },
      "summary": {
        "total-successful-session-count": 1842,
        "total-failure-session-count":      3
      },
      "failure-details": [
        {
          "result-type":            "certificate-expired",
          "sending-mta-ip":         "74.125.24.27",
          "receiving-mx-hostname":  "mail.example.com",
          "failed-session-count":   3
        }
      ]
    }
  ]
}

The key pieces of information:

The key failure codes

RFC 8460 defines a fixed list of result-type values. The most common ones:

Important: TLS-RPT only makes sense alongside an active MTA-STS. Without an MTA-STS policy, recipients have no target state to compare failures against.

How to analyse reports

Three analysis patterns that are almost always relevant in practice:

  1. Daily trend — do failures stay consistently low, or are there sudden spikes? Spikes indicate newly emerging problems (cert expiry, wrong MX configuration).
  2. Distribution across recipients — do failures come from a single recipient or across the board? A single recipient = a configuration problem there, broadly distributed = a problem of your own (policy or MX).
  3. result-type clustering — if 80% of failures are certificate-expired, you know immediately where to look.

Practical recommendations

Frequently asked questions

What does a TLS-RPT report tell me?

A daily report from a receiving server about all TLS attempts to your mail server: number of successful and failed sessions, plus the cause per failure (cert expiry, cipher mismatch, policy fetch error, etc.).

Which failure codes should I know?

The most common: starttls-not-supported, certificate-expired, certificate-not-trusted, certificate-host-mismatch, sts-policy-fetch-error, sts-policy-invalid. Each points directly to a concrete configuration gap.

Do I need MTA-STS for TLS-RPT?

TLS-RPT only makes sense alongside an active MTA-STS — otherwise recipients have no target state to compare failures against. The two belong together as a pair.

What about data protection for TLS-RPT reports?

Reports contain no mail content, no recipient addresses — only statistical TLS aggregate data and IPs. The GDPR-relevant element is essentially the sender server IP.

How long does daily analysis take?

With active MTA-STS in mode=enforce and a clean configuration: 5 minutes to skim. With problems or in the testing phase: 20–30 minutes for targeted investigation. Mailantis aggregates the reports and reduces this to one click.