Free MTA-STS Checker

Read the MTA-STS record a domain publishes, then paste the policy file it points at and see what it really does: enforcing or only testing, how long senders cache it, and whether it covers every mail server the domain actually uses. It runs free in your browser, with no signup and nothing stored.

Catch problems before they cost you.

Create a free Unspam account to save your results and re-run these checks anytime, so you catch a broken setup before it costs you. No credit card.

What is MTA-STS?

MTA-STS is how a domain tells the rest of the internet that mail arriving for it has to be encrypted, and delivered to a server whose certificate matches. Without it, SMTP encryption is opportunistic: a sender offers STARTTLS, and if anything goes wrong, an expired certificate, a capability stripped in transit, an attacker sitting in the path, it falls back to plain text rather than not delivering. That fallback is the whole problem, because it means the encryption can be switched off by anyone able to interfere with the connection. MTA-STS closes it by naming which servers may receive the domain’s mail and asking senders to refuse everything else. It is deliberately two pieces: a short DNS record at _mta-sts saying a policy exists and carrying a version id, and the policy itself, a plain text file served over HTTPS from mta-sts.example.com behind a certificate that has to validate. The DNS half is the part an attacker can tamper with, and it is the part that carries nothing worth tampering with. The policy half is the part that decides anything, and it is fetched over a channel that proves who served it.

How to read your result

  • v=STSv1; id=

    The DNS half, and both tags are required. The version has to be spelled exactly that way, in that case, and a sender that does not find it treats the domain as having no policy rather than trying to repair the record. The id is how a sender notices the policy changed: it is compared against the one cached, so editing the file without changing the id leaves everyone on the old policy until it expires.

  • mode:

    The only line that decides whether MTA-STS does anything. Enforce means a sender refuses to deliver over a connection it cannot authenticate. Testing means it reports the failure and delivers anyway, which is identical in outcome to having no policy at all. None means the domain is withdrawing, which is a real configuration and the documented way to retire a deployment.

  • max_age:

    How many seconds a sender may cache the policy, and the specification expects a value in weeks rather than hours. A long lifetime is the security property: once a sender has the policy, an attacker who blocks every future fetch still cannot get the domain downgraded. A short one hands them a fresh opportunity every day.

  • mx:

    One line per mail server the policy covers, and the list is exhaustive: in enforce mode, a sender refuses to deliver to any host the list does not match. A wildcard may replace the whole leftmost label and nothing else, so *.example.com matches mx1.example.com and matches neither example.com itself nor a.b.example.com.

Common problems and fixes

Left in testing mode

Testing was designed as a first step and has become a resting place. A policy in testing mode delivers exactly the mail an absent policy would, so nothing is protected, and the domain looks configured to anyone who checks only DNS. It is worth knowing that a large share of the domains publishing MTA-STS today are in testing, which is why this checker never reports a pass until the policy has been read.

One half published without the other

A DNS record with no policy file behind it protects nothing, because senders fetch the file and find nothing to apply. A policy file with no DNS record is never fetched at all, because nothing tells a sender to look. Both halves have to be live, and the file has to be served over HTTPS with a certificate that validates for mta-sts.example.com.

The id never changes

Senders decide whether to re-fetch by comparing the id in DNS with the one they cached. Editing the policy while leaving the id alone means every sender that already has a copy keeps applying the old one until max_age runs out, which on a correctly long lifetime can be weeks.

An MX host the policy does not list

This is the failure that stops mail rather than merely failing to protect it. Adding a mail server, moving to a new provider or keeping a backup MX that never made it into the policy means senders in enforce mode refuse to deliver to it. Comparing the mx lines against the MX records the domain publishes right now is the single most useful thing to check, and it is what this tool does with the policy you paste.

A wildcard that is not a leftmost label

mx.*.example.com and *example.com are both invalid, and *.example.com does not cover example.com itself. The rule is narrow on purpose, and a pattern written the way a shell glob would be leaves the hosts it was meant to cover uncovered.

No TLS-RPT alongside it

MTA-STS tells senders to refuse a connection it cannot authenticate. It does not tell you when that happened. Without a reporting record, a certificate that expires on a Friday produces silence rather than an alert, and the first signal is somebody saying their mail bounced.

Questions, answered.

Why do I have to paste the policy file myself?
Because a web page cannot fetch it. Policy hosts serve the file to mail servers, not to browsers, so they do not send the cross-origin header a page would need, and every attempt to read it from here would fail regardless of the domain. The file is still plain text at a fixed address you can open in a tab, so the tool checks the DNS half automatically and asks you to bring the other half across. Pasting it is what makes the rest possible: the mode, the lifetime and the coverage check all live in that file.
Does MTA-STS protect the mail I send?
No. A domain’s policy governs mail arriving for it, so publishing one protects your inbound mail against a downgrade attack. Whether the mail you send is protected depends on the recipient’s domain publishing a policy and your sending platform honouring it. Both sides are worth doing, and they are separate pieces of work.
Do I need a certificate for mta-sts.example.com?
Yes, and it has to validate for that exact hostname. A sender fetching the policy will not follow a redirect, will not accept a non-200 response and will not proceed past a certificate it cannot verify, because the certificate is the only thing making the policy trustworthy. A free certificate from any public authority is enough.
Is enforce mode risky?
It is the mode that can stop mail, so it is worth entering deliberately. The risk is not encryption failing, it is the mx list being incomplete or a certificate on a mail server expiring unnoticed. Publish a reporting record first, run in testing for a couple of weeks, read what comes back, and switch to enforce once the reports show nothing failing.
Is anything stored?
No. The DNS lookups run from your browser and the policy text you paste never leaves the page. To see whether the encryption is working in practice, check the reporting record with the free TLS-RPT checker.

A clean record is step one. See where your email actually lands.