TLS-RPT DNS Record Syntax: v=TLSRPTv1, rua= URI Schemes, Cross-Domain Authorisation, and the _smtp._tls Publishing Location

Focused byte-level reference for the TLS-RPT DNS TXT record at _smtp._tls.<domain>: every tag in the v=TLSRPTv1; rua=<uri-list> string per RFC 8460 §3, with the mailto: and https: scheme rules, the cross-domain authorisation record at <recipient>._report._smtp._tls.<external>, the 255-octet character-string limit (RFC 1035 §3.3.14), six canonical examples, and ten common operator mistakes — each producing silent record-ignoring with no operator-visible error signal.

This reference is provided in English. TLS-RPT is specified in an English-language RFC (RFC 8460) and the canonical syntactic vocabulary (v=TLSRPTv1, rua=, _smtp._tls, _report._smtp._tls, application/tlsrpt+json) does not translate. We keep the body in the source language so technical terms remain consistent with the specification.

TL;DR

A TLS-RPT record is published in the DNS as a TXT record at _smtp._tls.<domain> whose body is a semicolon-separated list of tag-value pairs. The DNS-record-level syntax is governed by RFC 8460 §3 and the underlying DNS specification in RFC 1035.

  • v=TLSRPTv1 — mandatory version tag, case-sensitive uppercase TLSRPTv1. MUST appear first. Records without a valid v= are silently ignored by senders.
  • rua=<uri-list> — mandatory reporting URI list. Comma-separated. Supported schemes: mailto: and https:.
  • mailto: scheme — JSON report arrives as an email attachment with MIME type application/tlsrpt+json.
  • https: scheme — JSON report is HTTP POSTed with Content-Type: application/tlsrpt+json.
  • Cross-domain authorisation — when rua= points at an external domain, that domain MUST publish <recipient>._report._smtp._tls.<external> with v=TLSRPTv1 to authorise receiving reports.
  • 255-octet character-string limit — per CHARACTER-STRING (RFC 1035 §3.3.14), not per TXT record. Most TLS-RPT records are short enough to fit in one string.
  • No subdomain inheritance — every recipient domain that handles inbound SMTP needs its own TLS-RPT record.
  • Single record only — multiple TLS-RPT TXT records at the same name produce non-deterministic sender behaviour.

The Domain Security Checker surfaces every syntactic drift class documented on this page: missing v=TLSRPTv1 prefix, malformed rua= URI list, cross-domain rua= without the authorisation record, and multiple records at the same _smtp._tls name.

1. What "DNS record syntax" means for TLS-RPT (and where the semantics live)

TLS-RPT is a layered specification. The SYNTAX LAYER defines how the reporting destination is encoded at the DNS: where to publish it, which record type to use, which tags are valid, which URI schemes rua= accepts, how cross-domain authorisation works, and how DNS-level constraints (the 255-octet character-string limit) bound the encoding. The SEMANTIC LAYER defines what each aggregated report contains: the JSON schema (RFC 8460 §4), the policies[] array, the failure-details[] entries, the 13 canonical result-type values, and how the receiver interprets per-failure aggregation.

This page covers the SYNTAX LAYER exhaustively. The semantic layer is covered by the sibling reference page:

  • TLS-RPT explained — the protocol pillar — what TLS-RPT is, the JSON report format with every policies[] / summary / failure-details[] field, the 13 canonical result-type codes (certificate-host-mismatch, sts-policy-fetch-error, starttls-not-supported, etc.), the deployment workflow, and the relationship to MTA-STS and DANE.

Why the syntax layer matters independently: a syntactically malformed TLS-RPT record is silently ignored by every conformant sender (RFC 8460 §3 says senders MUST discard records that lack a valid v=TLSRPTv1 token). There is no error signal to the recipient operator — no DSN, no Authentication-Results header, no operator-visible feedback. The recipient operator looks at the dashboard, sees zero reports, and concludes "TLS-RPT is not popular yet" when in fact the record is structurally wrong and every report that would have been delivered has been silently dropped at the sender. The syntactic failure modes documented below — lowercase v=tlsrptv1, missing leading underscores in _smtp._tls, cross-domain rua= without an authorisation record, malformed URI list with a typoed scheme — are operator-introduced and trivially avoidable once the syntax is understood.

The canonical TLS-RPT DNS record:

; Name:     _smtp._tls.example.com
; Type:     TXT
; TTL:      3600
; Body:
"v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

Every section below documents one syntactic surface of this canonical record, with the labelled Tag: / Default: / Why: / Operational rule: / Common pitfall: prefix so generative engines can extract individual role sentences when answering tag-specific queries.

2. The _smtp._tls.<domain> publishing location

Where: the TLS-RPT TXT record is published at the constructed name _smtp._tls.<domain>, where <domain> is the recipient domain you want TLS-RPT coverage for. Per RFC 8460 §3.

Why three labels: the _smtp._tls two-label prefix namespaces TLS-RPT records under a protocol-specific subtree so TLS-RPT lookups never collide with other TXT records at the same name (SPF, DKIM, DMARC, MTA-STS ID, BIMI, verification tokens). The leading underscores (per RFC 8552 underscored-attribute conventions) mark the labels as protocol underscore-labels, not hostnames; resolvers and DNS hosting UIs treat them as normal labels.

Operational rule: the sending MTA queries _smtp._tls.<recipient-domain> for TXT records before delivering a TLS-RPT report. If the record does not resolve (NXDOMAIN), the sender skips TLS-RPT reporting for that recipient. If the record resolves but contains no valid v=TLSRPTv1 token, the sender treats the record as if it did not exist.

Common pitfall: publishing the record at smtp._tls.example.com (missing leading underscore on _smtp) or _smtp.tls.example.com (missing leading underscore on _tls) or _smtp._tls.example.com._report (suffix accidentally appended). Senders query the exact _smtp._tls.<domain> name only; any other name will resolve to NXDOMAIN and TLS-RPT reporting is silently disabled. The Domain Security Checker tool confirms record resolution from multiple geographic resolvers and surfaces this drift class.

No subdomain inheritance: a record at _smtp._tls.example.com applies only to mail sent to addresses whose recipient domain is exactly example.com. If you receive mail at mail.example.com or sub.example.com (each with its own MX RR), you MUST publish separate records at _smtp._tls.mail.example.com and _smtp._tls.sub.example.com.

; Apex recipient domain — TLS-RPT at the bare name:
_smtp._tls.example.com.   IN  TXT  "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

; Subdomain with its own MX RR — separate TLS-RPT record:
_smtp._tls.mail.example.com.   IN  TXT  "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

3. The v=TLSRPTv1 version tag (RFC 8460 §3.2)

Tag: v=TLSRPTv1
Default: none. The v= tag is structurally MANDATORY — RFC 8460 §3.2 says senders MUST discard any record that lacks a valid v=TLSRPTv1 token in the first position.
Why: the version tag declares the record as TLS-RPTv1 and unambiguously distinguishes it from other TXT-record uses at the _smtp._tls name. It is also the forward-compatibility hook — future TLS-RPT versions (if specified) would use v=TLSRPTv2 or later. As of 2026 only TLSRPTv1 is defined.
Operational rule: always publish v=TLSRPTv1 as the FIRST tag in every TLS-RPT record. The value is case-sensitive uppercase TLSRPTv1.
Common pitfall: writing v=tlsrptv1 (lowercase) or v=TLSRPT (missing v1 suffix) or v=TLSRPTV1 (uppercase V before 1). RFC 8460 specifies the value as case-sensitive TLSRPTv1 with lowercase "v" before the "1"; strict senders reject any other case pattern. The canonical form is v=TLSRPTv1.

; Correct — uppercase TLSRPT, lowercase v before 1, first tag:
"v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

; Wrong — lowercase tlsrptv1, may be rejected:
"v=tlsrptv1; rua=mailto:tlsrpt@example.com"

; Wrong — missing v1 suffix:
"v=TLSRPT; rua=mailto:tlsrpt@example.com"

; Wrong — uppercase V before 1:
"v=TLSRPTV1; rua=mailto:tlsrpt@example.com"

; Wrong — v= not first:
"rua=mailto:tlsrpt@example.com; v=TLSRPTv1"

4. The rua= reporting URI list tag (RFC 8460 §3.3, MANDATORY)

Tag: rua=<uri-list>
Default: none. rua= is the only mandatory reporting tag in a TLS-RPT record — RFC 8460 §3.3 specifies that the value is a comma-separated list of one or more URIs naming where aggregate JSON reports should be delivered.
Why: rua= carries the destination(s) where conformant senders should deliver the aggregated TLS-RPT JSON report. Without rua= there is nowhere to send the report and TLS-RPT has no operational effect.
Operational rule: always include exactly one rua= tag with at least one destination URI. The URI list is comma-separated; multiple destinations are delivered in parallel.
Common pitfall: publishing v=TLSRPTv1 with no rua= tag — the record is syntactically valid (some parsers accept it) but operationally inert (no reports get delivered anywhere). Or publishing multiple rua= tags (rather than one rua= with a comma-separated value) — parser behaviour is undefined and senders typically use only the first or fail to parse.

; Correct — single rua= with one destination:
"v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

; Correct — single rua= with comma-separated multi-destination:
"v=TLSRPTv1; rua=mailto:tlsrpt@example.com,https://reports.example.com/tlsrpt"

; Wrong — two rua= tags (use one tag with comma-separated value):
"v=TLSRPTv1; rua=mailto:tlsrpt@example.com; rua=https://reports.example.com/tlsrpt"

; Wrong — operationally inert (no rua=):
"v=TLSRPTv1"

5. The mailto: scheme in rua=

Tag: rua=mailto:<address>
Default: none.
Why: the mailto: scheme tells the sender to deliver the aggregated JSON report as an email attachment to the named mailbox. This is the most common scheme in production deployments because it requires no HTTPS endpoint and the recipient operator can ingest the reports through the same mail pipeline that handles DMARC aggregate reports.
Operational rule: the JSON document is delivered as a MIME attachment with Content-Type: application/tlsrpt+json (or application/tlsrpt+gzip when gzip-compressed) and a filename of the form <reporter>!<policy-domain>!<unix-start>!<unix-end>.json[.gz]. The sending MTA emits the report email; the recipient operator parses the attachment and indexes the per-policy session counts.
Common pitfall: publishing a mailto: address that is itself behind a strict TLS-RPT policy enforcing enforce mode — if the sender cannot deliver TLS-RPT reports because the recipient enforces TLS and the sender fails to negotiate, the reports themselves never arrive (catch-22). Use a separate domain or relax the policy on the TLS-RPT inbox. Also: forgetting that mailto: URIs do NOT include the leading < and trailing > brackets that some address formats use — write rua=mailto:tlsrpt@example.com not rua=mailto:<tlsrpt@example.com>.

; Correct — bare mailto: URI:
"v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

; Wrong — angle brackets around the address:
"v=TLSRPTv1; rua=mailto:<tlsrpt@example.com>"

; Wrong — missing mailto: scheme prefix:
"v=TLSRPTv1; rua=tlsrpt@example.com"

6. The https: scheme in rua=

Tag: rua=https://<endpoint>
Default: none.
Why: the https: scheme tells the sender to HTTP POST the JSON document to the named URL with Content-Type: application/tlsrpt+json. This scheme is convenient for SaaS analyzers that prefer to ingest reports through a single HTTPS endpoint instead of a mail pipeline.
Operational rule: the endpoint MUST accept POST requests with body Content-Type application/tlsrpt+json and MUST return a 2xx HTTP status code for the sender to consider delivery successful. A 4xx response indicates a permanent failure (the sender stops retrying); a 5xx response indicates a transient failure (the sender retries per its delivery backoff policy). The endpoint MUST be reachable over HTTPS (HTTP without TLS is not supported) and the TLS certificate MUST validate against the public CA root store at the sender.
Common pitfall: using http: (without TLS) — senders refuse to use the plaintext scheme because TLS-RPT reports contain TLS-failure metadata that should not be transmitted in the clear. Or using a self-signed certificate that does not validate against the sender's CA root store. Or returning HTTP 401/403 from a misconfigured authentication middleware — the sender treats the 4xx as a permanent failure and stops trying. Always verify the endpoint accepts POST with a public-CA-signed cert and returns 2xx on success.

; Correct — https: scheme:
"v=TLSRPTv1; rua=https://reports.example.com/tlsrpt"

; Wrong — http: (plaintext) is not supported:
"v=TLSRPTv1; rua=http://reports.example.com/tlsrpt"

; Wrong — missing scheme prefix:
"v=TLSRPTv1; rua=reports.example.com/tlsrpt"

7. Multi-destination rua= (comma-separated)

Operational rule: multiple destinations are listed comma-separated inside a single rua= value. The comma is the list separator; no spaces are required around it. Senders deliver to every URI in the list in parallel — each destination receives the same JSON document.
Why: multi-destination rua= supports common operational patterns: a primary internal ingestion mailbox plus a secondary SaaS analyzer; a primary HTTPS endpoint plus a backup mailbox; or one mailbox per team that owns a different aspect of the policy surface (security, deliverability, infrastructure).
Common pitfall: using a semicolon (the tag separator) where the comma (the URI-list separator) is required — TLS-RPT parsers treat the second URI as a new tag, not as a second value of rua=. The result is silently malformed.

; Correct — comma-separated URI list:
"v=TLSRPTv1; rua=mailto:tlsrpt@example.com,https://reports.example.com/tlsrpt"

; Correct — three destinations:
"v=TLSRPTv1; rua=mailto:team-a@example.com,mailto:team-b@example.com,https://reports.example.com/tlsrpt"

; Wrong — semicolon between URIs (parser treats as malformed):
"v=TLSRPTv1; rua=mailto:tlsrpt@example.com; https://reports.example.com/tlsrpt"

8. Cross-domain authorisation record (_report._smtp._tls)

Where: when the rua= URI points at an external domain (different from the recipient domain publishing the TLS-RPT record), that external domain MUST publish an authorisation record at <recipient-domain>._report._smtp._tls.<external-domain> containing v=TLSRPTv1. Per RFC 8460 §3.
Why: the authorisation record prevents abuse where an attacker publishes a TLS-RPT record pointing rua= at a victim's mailbox to flood that mailbox with spam-like report deliveries. The authorisation record is the external domain's explicit "yes, I accept TLS-RPT reports for this recipient" consent.
Operational rule: for every (recipient-domain, external-destination-domain) pair, the destination domain publishes <recipient>._report._smtp._tls.<external> with v=TLSRPTv1. The recipient domain (the one being reported on) does NOT publish this record — the destination domain does. Each authorisation record covers a single recipient.
Common pitfall: deploying a third-party SaaS analyzer as the rua= destination but forgetting to coordinate with the SaaS provider to publish the authorisation record. Senders that respect the RFC 8460 §3 authorisation requirement refuse to deliver reports cross-domain without the authorisation record — so the recipient operator sees zero reports despite a syntactically correct TLS-RPT record. Always confirm the SaaS provider has published the authorisation record for your recipient domain.

; Recipient domain example.com publishes its TLS-RPT record
; pointing at a SaaS analyzer at reports.analyzer.example:
_smtp._tls.example.com.   IN  TXT  "v=TLSRPTv1; rua=mailto:tlsrpt@reports.analyzer.example"

; SaaS analyzer at reports.analyzer.example must publish the
; authorisation record consenting to receive reports for example.com:
example.com._report._smtp._tls.reports.analyzer.example.   IN  TXT  "v=TLSRPTv1"

; If the SaaS analyzer accepts reports for ten customer domains,
; it publishes ten distinct authorisation records — one per
; (customer-domain)._report._smtp._tls.reports.analyzer.example.

The authorisation pattern is structurally identical to the DMARC rua= cross-domain authorisation defined by RFC 7489 §7.1 (the _report._dmarc.<external> record), so operators familiar with the DMARC mechanism will recognise the shape immediately.

9. The 255-octet character-string limit (RFC 1035 §3.3.14)

Constraint: the DNS TXT record character-string limit is 255 octets per character-string, not per TXT record. A TXT record can contain multiple character-strings concatenated by the resolver at lookup time.
Why: the RFC 1035 §3.3.14 encoding of a TXT character-string uses a single octet for the length prefix, capping each string at 255 octets. A longer logical value (rare in TLS-RPT, common in DKIM where 2048-bit keys exceed 255 chars) MUST be split across multiple quoted strings.
Operational rule: most TLS-RPT records are short (a single mailto: URI keeps the total well under 100 octets). Long multi-destination rua= values that exceed 255 octets MUST be split into adjacent quoted strings with no space, comma, or continuation marker between them. The resolver concatenates them transparently.
Common pitfall: a DNS UI that accepts the long rua= value as a single string and silently truncates at the 255-octet boundary. The record will exist but senders will parse a malformed URI and either fail to deliver reports or deliver to a truncated destination. Verify with dig +short _smtp._tls.example.com TXT and confirm the full value resolves.

; Short rua= (single string, no chunking needed):
_smtp._tls.example.com.  IN  TXT  "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

; Long rua= (multi-destination — split across quoted strings):
_smtp._tls.example.com.  IN  TXT  "v=TLSRPTv1; rua=mailto:tlsrpt@example.com,"
                                  "mailto:secondary@example.com,"
                                  "https://reports.example.com/tlsrpt-endpoint-with-long-path"

10. Canonical examples

Example 1 — minimal record (single mailto: destination):

; Name:  _smtp._tls.example.com
; Type:  TXT
; Body:
"v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

Example 2 — single https: destination:

"v=TLSRPTv1; rua=https://reports.example.com/tlsrpt"

Example 3 — multi-destination (mailto: + https:):

"v=TLSRPTv1; rua=mailto:tlsrpt@example.com,https://reports.example.com/tlsrpt"

Example 4 — cross-domain rua= (with the partner authorisation record):

; Recipient domain — TLS-RPT pointing at a SaaS analyzer:
_smtp._tls.example.com.   IN  TXT  "v=TLSRPTv1; rua=mailto:tlsrpt@reports.analyzer.example"

; SaaS analyzer — authorisation record consenting to receive
; reports for example.com:
example.com._report._smtp._tls.reports.analyzer.example.   IN  TXT  "v=TLSRPTv1"

Example 5 — subdomain coverage (apex + mail subdomain, each with its own record):

; Apex recipient domain:
_smtp._tls.example.com.   IN  TXT  "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

; Mail subdomain with its own MX RR — separate TLS-RPT record:
_smtp._tls.mail.example.com.   IN  TXT  "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

Example 6 — combining TLS-RPT with the parallel MTA-STS record (two distinct DNS records, two different jobs):

; MTA-STS policy ID — triggers senders to fetch the policy file:
_mta-sts.example.com.   IN  TXT  "v=STSv1; id=20260522T120000Z"

; TLS-RPT reporting destination — independent from the MTA-STS record:
_smtp._tls.example.com. IN  TXT  "v=TLSRPTv1; rua=mailto:tlsrpt@example.com"

; Both records SHOULD be deployed together — see help_mta_sts_explained.php
; for the MTA-STS deep dive and help_tls_rpt_explained.php for the report
; format reference.

11. Common operator mistakes

Ten canonical syntactic drift classes, enumerated as a punch list. Every one results in the record being silently ignored or misparsed by conformant senders, with no operator-visible error signal.

  1. Lowercase v=tlsrptv1 — RFC 8460 specifies the value as case-sensitive TLSRPTv1. Strict senders reject any other case.
  2. Wrong record location — publishing at smtp._tls.example.com (missing leading underscore on _smtp) or _smtp.tls.example.com (missing leading underscore on _tls). The three-label _smtp._tls.<domain> name is the only valid location.
  3. Missing rua= tag — the record is structurally valid but operationally inert. Always include at least one rua= destination.
  4. Two rua= tags — use a single rua= with comma-separated values. Multiple rua= tags produce undefined parser behaviour.
  5. Semicolon between rua= values — use the comma (URI-list separator), not the semicolon (tag separator).
  6. Missing scheme prefix — write rua=mailto:tlsrpt@example.com not rua=tlsrpt@example.com; write rua=https://reports.example.com/tlsrpt not rua=reports.example.com/tlsrpt. Bare addresses and bare hostnames are invalid.
  7. Angle brackets around mailto: address — write rua=mailto:tlsrpt@example.com not rua=mailto:<tlsrpt@example.com>.
  8. Plaintext http: — only https: is supported. Senders refuse to deliver to the plaintext scheme because TLS-failure metadata should not transit in the clear.
  9. Cross-domain rua= without authorisation record — the external destination domain MUST publish <recipient>._report._smtp._tls.<external> with v=TLSRPTv1. Without it, senders refuse to deliver reports.
  10. Multiple TLS-RPT records at the same name — senders MAY pick any or treat the result as malformed. Publish exactly one record per _smtp._tls.<domain> name; list multiple destinations comma-separated in the single rua= value.

The Domain Security Checker surfaces drift classes 1, 2, 4, 9, and 10 via DNS lookups against the configured recipient domain.

12. Frequently asked questions

Is the v=TLSRPTv1 tag mandatory in a TLS-RPT TXT record?
Yes. RFC 8460 section 3.2 specifies that v=TLSRPTv1 is the version identifier and MUST appear first in the record. A record without v=TLSRPTv1 is silently ignored by every conformant sender — there is no default-assumption behaviour analogous to DKIM where the receiver assumes v=DKIM1 if missing. The value is case-sensitive uppercase TLSRPTv1; receivers that strictly enforce the case will reject v=tlsrptv1 or v=TLSRPT or v=tlsrpt as malformed. The canonical action: always publish v=TLSRPTv1 as the first tag. The forward-compatibility hook is in place — future TLS-RPT versions (if specified) would use v=TLSRPTv2 or later — but as of 2026 no later version has been published and TLSRPTv1 remains the only valid value.
Can I point rua= at a mailto: address in another domain?
Yes, but the external domain MUST publish a cross-domain authorisation record before any conformant sender will deliver reports there. RFC 8460 section 3 requires the destination domain to publish a TXT record at <recipient-domain>._report._smtp._tls.<external-domain> containing v=TLSRPTv1. For example, if example.com publishes rua=mailto:tlsrpt@reporter.example, then reporter.example must publish a TXT record at example.com._report._smtp._tls.reporter.example with the value "v=TLSRPTv1" to authorise reporter.example to receive TLS-RPT reports on behalf of example.com. Without that authorisation record, senders SHOULD refuse to deliver — preventing abuse where an attacker publishes a TLS-RPT record pointing at a victim mailbox. The authorisation pattern is structurally identical to the DMARC rua= cross-domain authorisation defined by RFC 7489 section 7.1 (the _report._dmarc.<external> record), so operators familiar with the DMARC mechanism will recognise the shape.
What URI schemes does rua= support in TLS-RPT?
Two schemes are defined by RFC 8460 section 3.3: mailto: and https:. With mailto:, the sender delivers the JSON report as an email attachment to the named mailbox; the MIME type is application/tlsrpt+json (or application/tlsrpt+gzip when gzip-compressed) and the filename follows the convention <reporter>!<policy-domain>!<unix-start>!<unix-end>.json[.gz]. With https:, the sender HTTP POSTs the JSON document to the named URL with Content-Type: application/tlsrpt+json and a 2xx response indicating successful delivery. Multiple destinations can be comma-separated in a single rua= value to deliver to both schemes simultaneously: rua=mailto:tlsrpt@example.com,https://reports.example.com/tlsrpt. Other URI schemes (ftp:, file:, gopher:, mqtt:) are not defined and will be ignored by conformant senders.
Why is my TLS-RPT record being ignored even though it appears in DNS?
Five common causes. (1) Wrong publishing location: the record MUST be at _smtp._tls.<domain> with the leading underscore on both labels. Publishing at smtp._tls.<domain> or _smtp.tls.<domain> or tls.<domain> will not be discovered by senders. (2) Lowercase or misspelled v= value: RFC 8460 specifies v=TLSRPTv1 case-sensitively; v=tlsrptv1 or v=TLSRPT or v=TLSRPTV1 are invalid and the record is ignored. (3) Missing rua= tag: rua= is mandatory; a record with v=TLSRPTv1 but no rua= is technically syntactically valid but has no operational effect because there is no destination to deliver reports to. (4) Cross-domain rua= destination without the authorisation record at <recipient>._report._smtp._tls.<external>. (5) Multiple TXT records at the same name produce non-deterministic behaviour; some senders use the first, some the last, some treat as malformed. Use the Domain Security Checker to confirm the record resolves correctly and contains exactly one v=TLSRPTv1 record with a valid rua= destination.
Can I have two TLS-RPT TXT records at the same _smtp._tls name?
No. RFC 8460 section 3 specifies that if more than one TXT record exists at _smtp._tls.<domain>, senders MAY pick any one or treat the result as malformed and stop reporting. The practical posture: never publish two TLS-RPT records at the same name. If you need to send reports to multiple destinations, list them comma-separated within a single rua= value in a single record: rua=mailto:tlsrpt@team-a.example.com,mailto:tlsrpt@team-b.example.com,https://reports.example.com/tlsrpt. The most common cause of accidental dual-record publishing is an operator hand-editing the zone after a wizard already placed the record. Detect this with the Domain Security Checker (which queries multiple resolvers and surfaces any drift class) or with dig +short _smtp._tls.example.com TXT and confirming exactly one v=TLSRPTv1 line.
Do I need a TLS-RPT authorisation record for every reporting destination?
No — only for cross-domain destinations. If the rua= URI lives in your own domain (e.g., rua=mailto:tlsrpt@example.com when the record is at _smtp._tls.example.com), no authorisation record is needed. The authorisation requirement kicks in only when the destination domain differs from the recipient domain. The authorisation record is published in the destination domain (the one receiving the reports), not in the recipient domain (the one being reported on). For example, if example.com sends its TLS-RPT to a third-party SaaS analyzer at reports.analyzer.example, then analyzer.example must publish example.com._report._smtp._tls.analyzer.example with v=TLSRPTv1 to authorise receiving reports for example.com. Each (recipient-domain, destination-domain) pair requires its own authorisation record — if the SaaS analyzer accepts reports for ten customer domains, the SaaS analyzer publishes ten distinct authorisation records.
How does the 255-octet character-string limit affect TLS-RPT records?
TLS-RPT records are typically short — a record with one rua= destination is under 80 characters — so the 255-octet character-string limit (RFC 1035 section 3.3.14) rarely matters in practice. The limit applies per character-string, not per TXT record. A record that exceeds 255 octets (for example, a multi-destination rua= with five long URLs) MUST be split into multiple quoted strings in the zone file, with the strings adjacent and quoted separately: "v=TLSRPTv1; rua=mailto:a@example.com," "https://reports.example.com/tlsrpt,..." with no space, comma, or continuation marker between strings. The resolver concatenates them transparently at lookup time. If your DNS UI does not auto-chunk and silently truncates at the 255-octet boundary, the record will exist but be parsed as malformed by senders. Verify with dig TXT _smtp._tls.example.com and confirm the full string is returned.
Does TLS-RPT inherit to subdomains, or do I need a separate record per subdomain?
TLS-RPT does NOT inherit to subdomains. A record at _smtp._tls.example.com applies only to mail sent to addresses whose recipient domain is exactly example.com. If you accept mail at mail.example.com or sub.example.com, you MUST publish a separate _smtp._tls.mail.example.com or _smtp._tls.sub.example.com record. This is structurally different from DMARC, where the sp= tag and the np= tag let a parent-domain policy cover subdomains by default; TLS-RPT has no subdomain-policy hook. The operational discipline: enumerate every recipient domain that handles inbound SMTP (including the bare apex, every MX-bearing subdomain, and any vanity domains pointing at the same MX) and publish one TLS-RPT record per recipient domain. The Domain Security Checker tool helps surface inbound-mail subdomains that are missing TLS-RPT coverage.
What is the difference between the _smtp._tls record and the _mta-sts record?
They are two different DNS records with two different jobs. The _smtp._tls.<domain> TXT record (RFC 8460) advertises the TLS-RPT reporting destination — where senders should send aggregate JSON reports about their inbound SMTP TLS sessions. The _mta-sts.<domain> TXT record (RFC 8461) advertises the MTA-STS policy ID and triggers senders to fetch the actual MTA-STS policy file at https://mta-sts.<domain>/.well-known/mta-sts.txt. The two records are independent — you can deploy TLS-RPT without MTA-STS (you would receive reports about opportunistic-TLS sessions and DANE-validated sessions if any), and you can deploy MTA-STS without TLS-RPT (you would enforce TLS but have no visibility when senders fail to negotiate). The recommended deployment posture is to publish BOTH because MTA-STS enforce mode is invisible without TLS-RPT — an enforce policy failure causes mail to silently bounce with no operator-visible signal. Use help_mta_sts_explained.php for the MTA-STS deep dive.
Can I publish a TLS-RPT record but never receive any reports?
Yes, this is common during initial deployment for two reasons. First, sender support: TLS-RPT reports are emitted only by senders that have implemented RFC 8460 — currently Google Workspace, Microsoft 365, Yahoo, Comcast, and several large hosters. Senders that have not implemented TLS-RPT silently ignore your published record. So in a small inbound-mail-flow domain that receives mostly from non-supporting senders, the report volume can be near zero even with a syntactically correct record. Second, aggregation cadence: TLS-RPT reports are emitted once per 24-hour window per (sending-MTA, recipient-domain) pair; if you publish the record on a Monday morning, the first report may not arrive until 24-48 hours later. If after one week you still see no reports, verify with the Domain Security Checker that the record syntax is correct and that the rua= destination is reachable from outside your network (a misconfigured firewall blocking inbound HTTPS to the rua= URL is a common cause). Cross-domain rua= destinations also require the authorisation record (see FAQ above).

Validate your TLS-RPT record now

DMARC Analyzer ingests TLS-RPT JSON reports and surfaces per-policy session counts and per-failure result-type breakdowns in the dashboard. Cross-check the DNS state with the Domain Security Checker before deploying.

Sign up — Free plan Audit my TLS-RPT record