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 uppercaseTLSRPTv1. MUST appear first. Records without a validv=are silently ignored by senders.rua=<uri-list>— mandatory reporting URI list. Comma-separated. Supported schemes:mailto:andhttps:.mailto:scheme — JSON report arrives as an email attachment with MIME typeapplication/tlsrpt+json.https:scheme — JSON report is HTTP POSTed withContent-Type: application/tlsrpt+json.- Cross-domain authorisation —
when
rua=points at an external domain, that domain MUST publish<recipient>._report._smtp._tls.<external>withv=TLSRPTv1to 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 canonicalresult-typecodes (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"
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.
- Lowercase
v=tlsrptv1— RFC 8460 specifies the value as case-sensitiveTLSRPTv1. Strict senders reject any other case. - 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. - Missing
rua=tag — the record is structurally valid but operationally inert. Always include at least onerua=destination. - Two
rua=tags — use a singlerua=with comma-separated values. Multiplerua=tags produce undefined parser behaviour. - Semicolon between
rua=values — use the comma (URI-list separator), not the semicolon (tag separator). - Missing scheme prefix —
write
rua=mailto:tlsrpt@example.comnotrua=tlsrpt@example.com; writerua=https://reports.example.com/tlsrptnotrua=reports.example.com/tlsrpt. Bare addresses and bare hostnames are invalid. - Angle brackets around
mailto:address — writerua=mailto:tlsrpt@example.comnotrua=mailto:<tlsrpt@example.com>. - Plaintext
http:— onlyhttps:is supported. Senders refuse to deliver to the plaintext scheme because TLS-failure metadata should not transit in the clear. - Cross-domain
rua=without authorisation record — the external destination domain MUST publish<recipient>._report._smtp._tls.<external>withv=TLSRPTv1. Without it, senders refuse to deliver reports. - 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 singlerua=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.