| # | Tag | Value | Notes | |
|---|---|---|---|---|
| {{ idx + 1 }} | {{ row.tag }} | {{ row.value }} | {{ row.note || '-' }} |
| # | Check | Status | Notes | |
|---|---|---|---|---|
| {{ idx + 1 }} | {{ c.label }} | {{ c.status }} | {{ c.note || '-' }} |
| # | Tag | Value |
|---|---|---|
| {{ idx + 1 }} | {{ row.tag }} | {{ row.value }} |
{{ builderSnippet }}
Email transport security reporting records are small text policies that a domain publishes so other mail systems know where to send reports when encrypted delivery fails. A practical email security record validator helps you confirm that the policy is present and that report destinations are written correctly before you rely on them. That matters during migrations, new gateways, or vendor changes, when one missing character can quietly drop reports.
Type your domain, run a check, and read the result as simple pass, warn, and fail messages that point to what needs attention. You will also see the published policy record and a token by token breakdown that makes it easier to spot duplicates and typos. If you are starting from scratch, the builder can draft a clean record string that you can paste into your domain configuration.
A realistic example is setting reports to go to a shared mailbox and a secure web endpoint, then checking that both targets are accepted and the version is correct. The tool also surfaces related email policy signals, which helps you confirm that reporting sits alongside your other protections. Warnings are often about interoperability and consistency, while failures usually mean the policy is missing or a destination is invalid.
A well formatted record does not prove that reports will arrive, that a mailbox is monitored, or that every connection is protected. Treat report addresses as operational data and avoid sharing them widely unless you need to. After publishing changes, validate again later because caches and propagation can delay what different resolvers return.
Validate a TLS reporting policy record for a domain, then use the results to correct report destinations and publish a clean TXT entry.
example.com.v and rua tokens were parsed as expected.Input domain: example.com
Expected outcome: one published TXT policy at _smtp._tls.example.com, v present and first, and at least one valid rua destination.
If you see multiple TXT answers, treat it as a cleanup task even if one answer looks correct.
v=TLSRPTv1 first to avoid edge case parsers.Pro tip: make one small change at a time, publish, then validate from two resolvers to separate syntax issues from propagation delays.
SMTP TLS Reporting (TLS-RPT) records are Domain Name System (DNS) TXT policies that tell sending mail systems where to deliver aggregated reports about Transport Layer Security (TLS) delivery failures. This validator measures whether _smtp._tls.<domain> returns a policy, how its tags are structured, and whether reporting destinations follow the accepted schemes.
The core computation is a structured parse of the TXT value into semicolon separated segments, then into tag and value pairs. Each rule produces a discrete result with a status and a short note that explains what was detected.
Results are categorized into PASS, WARN, FAIL, and INFO. PASS indicates the record matches the expected structure, WARN flags likely workable configurations that can reduce interoperability, and FAIL indicates missing or invalid required elements.
Comparisons across runs depend on DNS propagation and resolver cache state. When multiple TXT answers exist, the tool warns and selects the longest unique value as the primary record for token parsing.
_smtp._tls.<domain> using the selected DNS over HTTPS resolver.v equals TLSRPTv1 and warn if v is not the first tag.rua on commas, then accept only mailto: addresses and https: URLs.| Symbol | Meaning | Unit/Datatype | Source |
|---|---|---|---|
d |
Input domain after trimming and basic cleanup | string | Input |
d_ascii |
ASCII hostname used for lookups | string | Derived |
fqdn |
Lookup name _smtp._tls.<d_ascii> |
string | Derived |
records |
Unique TXT values returned for fqdn |
string[] | Derived |
primary |
Selected TXT value used for token parsing | string | Derived |
tokens |
Ordered tag and value segments split from primary |
object[] | Derived |
checks |
Rule outcomes with label, status, and note | object[] | Derived |
ttl |
Time to live for the first TXT answer | seconds or null | Derived |
time_ms |
Elapsed resolver request time | milliseconds | Derived |
Published TXT value:
v=TLSRPTv1; rua=mailto:tlsrpt@example.com, https://reports.example.com/tlsrpt
Parsed tokens:
1) v = TLSRPTv1
2) rua = mailto:tlsrpt@example.com, https://reports.example.com/tlsrpt
Interpretation: this configuration should produce PASS for version, ordering, and destination validation, with WARN only if extra tags or duplicates exist.
| Status | Meaning | Action cue |
|---|---|---|
| PASS | Meets the expected structure for the rule. | Move to the next check. |
| WARN | Likely workable, but may reduce interoperability or clarity. | Clean up when you next touch the policy. |
| FAIL | Missing or invalid requirement for a correct TLS-RPT policy. | Fix before relying on reporting. |
| INFO | Informational result used for context, not pass or fail. | Read for background, then continue. |
| Constant | Value | Unit | Source | Notes |
|---|---|---|---|---|
TLSRPT_KNOWN_TAGS |
v, rua |
set | Constant | All other tags are flagged for review. |
| Default builder destination | mailto:tlsrpt@<domain> |
string | Derived | Used only when no explicit builder list is provided. |
| Zone snippet TTL | 3600 | seconds | Constant | Shown in the snippet as a starting point, not auto-detected. |
| Resolver options | Auto, Cloudflare, Google | enum | Input | Auto falls back to Google only when the first request fails. |
| Field | Type | Min | Max | Step/Pattern | Error Text | Placeholder |
|---|---|---|---|---|---|---|
| Domain | text | — | — | Sanitized from domain, email, or URL inputs | Domain is required. |
example.com |
| Resolver | enum | — | — | auto, cloudflare, google |
— | Auto |
| Timeout | number | 0 | — | Step 100 | — | 3500 |
| Related policy checks | boolean | — | — | On or off | — | On |
| Builder rua list | text | — | — | Comma separated URIs | — | mailto:tlsrpt@example.com |
| Builder HTTPS URI | text | — | — | Optional single URI | — | https://reports.example.com/tlsrpt |
v tag |
text | — | — | Must equal TLSRPTv1 (case insensitive) |
Missing v=TLSRPTv1 |
— |
rua tag |
text | — | — | Comma separated mailto: or https: targets |
Missing rua= reporting target(s). |
— |
| Input | Accepted Families | Output | Encoding/Precision | Rounding |
|---|---|---|---|---|
| Domain | Hostname, email address, or URL string | ASCII hostname for lookups | URL hostname parsing, trailing dot trimmed | None |
| TLS-RPT TXT values | Quoted or unquoted TXT data | Record list and primary record | Quoted chunks are concatenated into one string | None |
| rua destinations | mailto: and https: |
Per destination validity | URL parsing for https:, simple check for mailto |
None |
| Results snapshot | Structured values and lists | Pretty printed JSON | Two space indentation | Time rounded to milliseconds |
Accept header requesting application/dns-json.AbortController, and timeout zero disables the extra abort timer.v and rua are treated as known tags, and other tags are flagged for review.rua is split on commas.https: URLs require brackets and can fail URL parsing if malformed.AbortController support can prevent client-side timeouts from taking effect.The record structure aligns with SMTP TLS Reporting as defined in RFC 8460, and the related signals correspond to MTA-STS in RFC 8461 and DMARC in RFC 7489. DNS over HTTPS transport is described in RFC 8484.
DNS lookups are made from your browser using the selected resolver and results stay in memory, so handle domains and report addresses per your security policy and applicable privacy rules such as GDPR.
example.com and avoid extra spaces._smtp._tls.<domain>.mailto: or https: destinations and remove unsupported schemes.v=TLSRPTv1 first even when extensions are present.mailto: targets to avoid personnel churn.https: endpoint only if you control ingestion and can handle volume.TLSRPTv1.The app code does not write to local or session storage. It performs DNS lookups to the selected resolver and keeps results in memory for the current page session.
Results reflect what the chosen resolver returns at the time of the query. The checks validate structure and destinations, not whether reports will be delivered or processed.
Cache and propagation can make different resolvers disagree for a while.WARN indicates a rule found something that might still work, but can reduce interoperability or clarity, such as multiple TXT answers, v not first, or unknown tags.
Validation requires network access for DNS over HTTPS queries. The builder can assemble a policy record and zone snippet without doing any lookups.
You can choose Cloudflare, Google, or Auto. Auto tries Cloudflare first and falls back to Google only when the first request fails.
Publish a TXT record at _smtp._tls.<domain> with v=TLSRPTv1 first and a non-empty rua. Then run the validator and fix any FAIL results.
Each rua entry must be either a mailto: address that contains an at sign or a parseable https: URL. Other schemes are rejected.
You can copy or download the parsed token rows, the check results, and a structured JSON snapshot. Tables can also be exported as a Word document.
This package does not include pricing or license text in its metadata or interface, so consult the hosting site for the applicable terms.