πŸ”

DNS Mail MTA-STS

Security Auditor

Validates MTA-STS for secure email transmission

SecurityDNSMail
20 credits
Per check
~30 seconds
Average runtime
Active
Status

Run this auditor

3 of 3 free audits left today

See what DNS Mail MTA-STS finds on your site. No sign-up needed.

How it works

  1. Domain β€” takes the hostname of the audited URL and removes one leading www.. A URL with no hostname ends the audit with 501. The audited page itself is never fetched.

  2. TXT record β€” looks up the TXT records at _mta-sts.<domain>. A resolver failure (SERVFAIL, timeout) ends the audit with 500; no record warns (300). Only the first record is read: it must start with v=STSv1 and carry an id= tag, otherwise it warns (301) and the policy is not fetched.

  3. Policy fetch β€” requests https://mta-sts.<domain>/.well-known/mta-sts.txt the way a sending server does (RFC 8461 section 3.3): a valid certificate is required, no TLS fallback, and redirects are not followed. A connection, TLS or timeout error warns (305); any status other than 2xx, including a redirect, warns (304).

  4. Mode β€” reads the mode: line of the policy. none fails (400), testing warns (302), a missing or unrecognised mode warns (303), enforce passes (200).

  5. Aggregate β€” FAIL wins over WARNING; the first rule that stops the audit (no record, malformed record, fetch problem) is the one reported.

  6. Specification pin β€” every run emits 37A-DnsMailMtaStsAuditor-100 (INFORMATION), naming RFC 8461 SMTP MTA Strict Transport Security (September 2018). It does not change the overall status.

What this auditor validates

Every row maps to one checkRule* method and one CheckCode, in the order the auditor runs them. CheckCode suffixes use status ranges: 100 information, 200 success, 300–399 warning, 400–499 fail, 500–599 error.

CheckCodeStatusWhen it firesRecommendationWhy it matters
37A-DnsMailMtaStsAuditor-100INFORMATIONAlways. Records the specification this auditor implements: RFC 8461 SMTP MTA Strict Transport Security (September 2018).β€” (recommendation is null; nothing for the site to change)β€”
37A-DnsMailMtaStsAuditor-300WARNINGNo TXT record exists at _mta-sts.<domain>, so MTA-STS is not advertised.Publish a TXT record at _mta-sts.{domain} with "v=STSv1; id=<timestamp>" (for example id=20260101000000Z) and serve the policy at {policyUrl}.Without MTA-STS, a sending server that is downgraded to plaintext or pointed at an impostor mail server still delivers, so email to the domain can be read or altered in transit.
37A-DnsMailMtaStsAuditor-301WARNINGThe first TXT record does not start with v=STSv1 (case-insensitive) or has no id= tag.Replace "{record}" at _mta-sts.{domain} with "v=STSv1; id=<timestamp>" (for example id=20260101000000Z) and change the id every time the policy changes.Sending servers ignore an MTA-STS record they cannot parse, so the policy is never fetched and email to the domain gets no transport protection.
37A-DnsMailMtaStsAuditor-305WARNINGFetching the policy URL failed with a connection, TLS or timeout error.Make {policyUrl} reachable over HTTPS with a certificate valid for mta-sts.{domain} (sending servers do not fall back, RFC 8461 section 3.3). Last error: {error}.A policy host that cannot be reached over valid HTTPS gives sending servers nothing to enforce, so the advertised MTA-STS protection is not applied to email.
37A-DnsMailMtaStsAuditor-304WARNINGThe policy URL answered a status other than 2xx (a redirect counts: RFC 8461 section 3.3 forbids following it).Serve the policy file at {policyUrl} with HTTP 200 directly (no redirect, RFC 8461 section 3.3) and a certificate valid for mta-sts.{domain}; it currently answers HTTP {status}.When the policy cannot be fetched, sending servers that never cached it deliver without MTA-STS protection and those that cached it stop refreshing it.
37A-DnsMailMtaStsAuditor-400FAILThe policy says mode: none.Change "mode: none" to "mode: enforce" (or "mode: testing" while validating) in {policyUrl} and bump the id in the _mta-sts.{domain} TXT record.Mode none tells every sending server to drop the policy, so email to the domain can be downgraded to plaintext or sent to an impostor server without anyone noticing.
37A-DnsMailMtaStsAuditor-302WARNINGThe policy says mode: testing.Once your TLS-RPT reports show no failures, change "mode: testing" to "mode: enforce" in {policyUrl} and bump the id in the _mta-sts.{domain} TXT record.In testing mode a downgrade or certificate problem is only reported, never refused, so email to the domain can still be intercepted while the policy looks deployed.
37A-DnsMailMtaStsAuditor-303WARNINGThe policy has no mode line or a value other than enforce, testing or none.Set "mode: enforce" in {policyUrl} (RFC 8461 allows enforce, testing or none, not "{mode}") and bump the id in the _mta-sts.{domain} TXT record.Sending servers discard a policy whose mode they do not recognise, so the domain gets no transport protection despite advertising MTA-STS.
37A-DnsMailMtaStsAuditor-200SUCCESSThe TXT record is valid and the policy fetched with HTTP 2xx says mode: enforce. Message names the policy URL and the record id.β€”β€”
37A-DnsMailMtaStsAuditor-500ERRORThe resolver failed (SERVFAIL, timeout) on the _mta-sts.<domain> TXT lookup, so the record may well exist.Check that the name servers answering for _mta-sts.{domain} respond to TXT queries, then run the audit again. Last error: {error}.β€”
37A-DnsMailMtaStsAuditor-501ERRORThe audited URL is empty, malformed or has no hostname, so no domain can be derived.Monitor an absolute URL with a hostname (for example https://example.com/) instead of "{url}", then run the audit again.β€”

Output Documentation

StatusDescriptionTest logic
SUCCESSMTA-STS is advertised and enforcedValid _mta-sts TXT record and a policy fetched with HTTP 2xx whose mode is enforce (200).
WARNINGMTA-STS is missing, unreadable or not enforcingNo TXT record (300); malformed record (301); policy in testing mode (302); unknown or missing mode (303); policy URL not 2xx (304); policy fetch failed (305).
FAILMTA-STS is switched off by the policyPolicy mode none (400).
ERRORThe auditor could not run the checkDNS lookup failure (500); URL without a hostname (501).
INFORMATIONSpecification pinAlways emitted (100); does not change overall status.

Every check carries the audited URL as its resource and, in data, the fields relevant to that step: domain, mtaStsFqdn, txtRecords, mtaStsRecord, policyId, policyUrl, policyHttpStatus, policyMode, policyBody (capped at 2 KB) and policyFetchError.

Risks and Considerations

Why MTA-STS matters

  • Without it, an attacker on the network path can tell a sending server that your mail servers do not support TLS, or present any certificate, and the message is delivered in the clear.

  • MTA-STS works with DANE and TLS-RPT: TLS-RPT (_smtp._tls.<domain>) is how you learn about delivery failures before switching from testing to enforce.

Modes

  • enforce is the only mode that protects email; testing only reports problems, and none tells senders to forget the policy (used to retire it).

  • Every change to the policy file needs a new id in the TXT record, otherwise sending servers keep the cached version until max_age expires.

Policy hosting

  • The policy must be served at https://mta-sts.<domain>/.well-known/mta-sts.txt with a certificate valid for mta-sts.<domain>; RFC 8461 forbids following redirects and falling back to HTTP, and this auditor does neither.

  • The auditor reads only the mode line. mx entries and max_age are not validated against the domain's MX records.

Behavior changes from the previous version

  • A URL with no hostname used to FAIL; it is now ERROR (501), because the problem is with the monitored URL, not the domain.

  • A DNS resolver failure used to be reported as "MTA-STS not advertised" (WARNING); it is now ERROR (500), because the record may exist.

  • A TXT record that starts with v=STSv1 but has no id= tag used to be accepted; it is now malformed (301).

  • The policy body stored in check data is capped at 2 KB.

  • All other verdicts are unchanged: mode: none stays FAIL; testing, an unknown mode, a non-2xx policy answer and a policy fetch error stay WARNING.

What this auditor does not check

  • Only the first _mta-sts TXT record is read; RFC 8461 says there must be exactly one.

  • The policy's mx patterns, max_age and the actual TLS configuration of the mail servers are out of scope (see the DNS Mail MX and TLS-RPT auditors).

This documentation is built and hosted on Mintlify, a developer documentation platform.

Source: docs.37audits.com

Ready to start auditing?

Add this auditor to your monitoring setup and start identifying issues on your websites today.

Β© 2026 37 Audits. All rights reserved. Audit your websites with confidence.

Supported by

Made with ❀️ in Floripa