Looking up MTA-STS DNS record, fetching policy file, and checking TLS-RPT...
Looking up MTA-STS DNS record, fetching policy file, and checking TLS-RPT...
MTA-STS + TLS-RPT for
Checked 5/14/2026, 10:53:40 PM · 166ms
No MTA-STS at all. Mail in transit is not enforced.
looked up: _mta-sts.duolingo.com
Or share this URL with the team that owns the records.
https://mta-sts.duolingo.com/.well-known/mta-sts.txt
<!doctype html><html dir="ltr"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"><meta name="robots" content="NOODP"><noscript><meta http-equiv="refresh" content="0; url=/nojs/splash"></noscript><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="apple-mobile-web-app-title" content="Duolingo"><meta name="google" content="notranslate"><meta name="mobile-web-app-capable" content="yes"><meta name="apple-itunes-app" content="app-id=570060128"><meta name="facebook-domain-verification" content="mwudgypvvgl4fekxjk5rpk3eqg7ykt"><link rel="apple-touch-icon" href="https://d35aaqx5ub95lt.cloudfront.net/images/duolingo-touch-icon2.png"><link rel="icon" href="https://d35aaqx5ub95lt.cloudfront.net/favicon.ico"><script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" data-document-language="true" charset="UTF-8" data-domain-script="55a7f100-001e-4085-87ec-1a6d522f7d67"></script><script>function OptanonWrapper(){}</script><script async defer="defer" src="https://www.recaptcha.net/recaptcha/enterprise.js?render=6LcLOdsjAAAAAFfwGusLLnnn492SOGhsCh-uEAvI"></script><link rel="manifest" href="/manifest.json"><meta name="twitter:image" content="https://www.duolingo.com/images/facebook/duo200.png" /><meta name="twitter:card" content="summary" /><meta name="twitter:site" content="@duolingo" /><meta name="twitter:title" content="Duolingo - Learn a language for free @duolingo" /><meta name="twitter:description" content="Learn languages by playing a game. It's 100% free, fun, and scientifically proven to work." data-react-helmet="true" data-rh="true" /><meta property="fb:app_id" content="234536436609303" /><meta property="og:type" content="website" /><meta property="og:url" content="https://www.duolingo.com/" /><meta property="og:image" content="https://www.duolingo.com/images/facebook/duo-08523a2.jpg" /><meta property="og:image:height" content="630" /><meta property="og:image:width" content="1200" /><meta property="og:site_name" content="Duolingo" /><meta property="og:title" content="Learn a language for free" /><meta property="og:description" content="Learn languages by playing a game. It's 100% free, fun, and scientifically proven to work." data-react-helmet="true" data-rh="true" /><title data-react-helmet="true" data-rh="true">Duolingo</title><meta name="keywords" content="learn, spanish, german, french, portuguese, italian, english, free, lessons, course, language, study, flashcards" /><meta name="description" content="Duolingo is the world's most popular way to learn a language. It's 100% free, fun and science-based. Practice online on duolingo.com or on the apps!" data-react-helmet="true" data-rh="true" /><link rel="alternate" hreflang="ar" href="https://ar.duolingo.com/" /><link rel="alternate" hreflang="bn" href="https://bn.duolingo.com/" /><link rel="alternate" hreflang="cs" href="https://cs.duolingo.com/" /><link rel="alternate" hreflang="de" href="https://de.duolingo.com/" /><link rel="alternate" hreflang="el" href="https://el.duolingo.com/" /><link rel="alternate" hreflang="en" href="https://www.duolingo.com/" /><link rel="alternate" hreflang="es" href="https://es.duolingo.com/" /><link rel="alternate" hreflang="fr" href="https://fr.duolingo.com/" /><link rel="alternate" hreflang="hi" href="https://hi.duolingo.com/" /><link rel="alternate" hreflang="hu" href="https://hu.duolingo.com/" /><link rel="alternate" hreflang="id" href="https://id.duolingo.com/" /><link rel="alternate" hreflang="it" href="https://it.duolingo.com/" /><link rel="alternate" hreflang="ja" href="https://ja.duolingo.com/" /><link rel="alternate" hreflang="ko" href="https://ko.duolingo.com/" /><link rel="alternate" hreflang="nl" href="https://nl-nl.duolingo.com/" /><link rel="alternate" hreflang="pa" href="https://pa.duolingo.com/" /><link rel="alternate" hreflang="pl" href="https://pl.duolingo.com/" /><link rel="alternate" hreflang="pt" href="https://pt.duolingo.com/" /><link rel="alternate" hreflang="ro" href="https://ro.duolingo.com/" /><link rel="alternate" hreflang="ru" href="https://ru.duolingo.com/" /><link rel="alternate" hreflang="sv" href="https://sv.duolingo.com/" /><link rel="alternate" hreflang="ta" href="https://ta.duolingo.com/" /><link rel="alternate" hreflang="te" href="https://te.duolingo.com/" /><link rel="alternate" hreflang="th" href="https://th.duolingo.com/" /><link rel="alternate" hreflang="tl" href="https://tl.duolingo.com/" /><link rel="alternate" hreflang="tr" href="https://tr.duolingo.com/" /><link rel="alternate" hreflang="uk" href="https://uk.duolingo.com/" /><link rel="alternate" hreflang="ur" href="https://ur.duolingo.com/" /><link rel="alternate" hreflang="vi" href="https://vi.duolingo.com/" /><link rel="alternate" hreflang="x-default" href="https://www.duolingo.com/" /><link rel="alternate" hreflang="zh" href="https://www.duolingo.cn/" /><link rel="canonical" href="https://www.duolingo.com/" id="canonical" /><script>window.duo={"uiLanguage":"en","removeNativeAppBanner":false}</script> <script>window.duo.useDuolingoSans=!0</script> <script defer="defer" src="https://d35aaqx5ub95lt.cloudfront.net/js/manifest-63e3953d.js"></script><script defer="defer" src="https://d35aaqx5ub95lt.cloudfront.net/js/features-91ec4487.js"></script><script>"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7979],{57733:(o,e,d)=>{const n=d.p+"vendor/3bbe299f41d8289a47d91773fee0cb6a.woff2",a=d.p+"vendor/f2331bbfd902cdf8971c4d3184a44283.woff2",f=d.p+"vendor/68d22534874c554b0c9ebabea379fc60.woff2",t=d.p+"fonts/a96f1b78ebf295556c0e9500cde6dd64.woff2",u=d.p+"fonts/642e24bb0295f3aee4dedcd8eecd8007.woff2",c=d.p+"fonts/9a7b142e254cc4aaae3dab3017c7ee53.woff2",w=(o,e)=>[new FontFace("din-round",`url(${o}) format("woff2")`,{style:e,weight:"700"}),new FontFace("din-round",`url(${o}) format("woff2")`,{style:e})],s=new FontFace("din-round",`url(${u}) format("woff2")`,{style:"normal",weight:"500"}),l=new FontFace("din-round",`url(${t}) format("woff2")`,{style:"normal",weight:"700"}),[r,m]=w(a,"normal"),[i,b]=w(n,"italic"),F=new FontFace("feather",`url(${f}) format("woff2")`,{style:"normal",weight:"700"}),h=new FontFace("feather",`url(${a}) format("woff2")`,{style:"normal",weight:"900"}),g=new FontFace("Noto Sans Math",`url(${c}) format("woff2")`,{style:"normal",weight:"400"});window.duo.useDuolingoSans?(document.fonts.add(r),document.fonts.add(m),document.fonts.add(i),document.fonts.add(b),["ru","uk","vi"].includes(window.duo.uiLanguage)?document.fonts.add(h):document.fonts.add(F)):(document.fonts.add(s),document.fonts.add(l),document.fonts.add(F)),document.fonts.add(g),window.duo.useDuolingoSans?(r.load(),m.load(),i.load(),b.load()):(s.load(),l.load())}},o=>{o(o.s=57733)}])</script><script defer="defer" src="https://d35aaqx5ub95lt.cloudfront.net/js/8553-a0eeda7a.js"></script><script defer="defer" src="https://d35aaqx5ub95lt.cloudfront.net/js/polyfills-4de5bd64.js"></script> <script defer="defer" src="https://d35aaqx5ub95lt.cloudfront.net/js/9819-e5d87afb.js"></script><script defer="defer" src="https://d35aaqx5ub95lt.cloudfront.net/js/strings/en-9ae2a671.js"></script> <script defer="defer" src="https://d35aaqx5ub95lt.cloudfront.net/js/1319-22d6fc5c.js"></script><script defer="defer" src="https://d35aaqx5ub95lt.cloudfront.net/js/app-86bd6d1d.js"></script><link href="https://d35aaqx5ub95lt.cloudfront.net/css/1319-8091c681.css" rel="stylesheet"><link href="https://d35aaqx5ub95lt.cloudfront.net/css/app-52d7caeb.css" rel="stylesheet"></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TX6Z97C" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div class="fs-unmask" id="root" onclick=""></div><div class="fs-unmask" id="overlays" onclick=""></div><script>if("/errors/not-supported.html"!==window.location.pathname)for(var supportsAbortController=("AbortController"in window&&"Request"in window&&Object.hasOwnProperty.call(Request.prototype,"signal")),supportsElementAnimate=("animate"in Element.prototype),supportsES2015=function(){if("undefined"==typeof Symbol||"undefined"==typeof Proxy)return!1;try{return new Function("(a = 0) => a")(),new Function("class MyEvent extends Event{}")(),!1===new Function("return new Boolean(Symbol.match)")()?!1:(new Function("new.target")(),new Function('class ಠ_ಠ extends Array {constructor(j = "a", ...c) {const q = (({u: e}) => {return { [`s${c}`]: Symbol(j) };})({});super(j, q, ...c);}}new Promise((f) => {const a = function* (){return "𠮷".match(/./u)[0].length === 2 || true;};for (let vre of a()) {const [uw, as, he, re] = [new Set(), new WeakSet(), new Map(), new WeakMap()];break;}f(new Proxy({}, {get: (han, h) => h in han ? han[h] : "42".repeat(0o10)}));}).then(bi => new ಠ_ಠ(bi.rd));')(),!!new Function("return (a, b,) => a.padStart(5, '0') === '0000x' && Object.values(b).length === 2")()("x",{a:1,b:2}))}catch(e){return!1}}(),supportsEs2019=("flat"in Array.prototype&&"flatMap"in Array.prototype&&"fromEntries"in Object&&"trimStart"in String.prototype&&"trimEnd"in String.prototype&&"description"in Symbol.prototype),supportsIntersectionObserver=("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype&&"isIntersecting"in window.IntersectionObserverEntry.prototype),supportsWebAssembly=("WebAssembly"in window),supportsResizeObserver=("ResizeObserver"in window),features=[supportsEs2019,supportsWebAssembly,supportsAbortController,supportsElementAnimate,supportsES2015,supportsIntersectionObserver,supportsResizeObserver],i=0;i<features.length;i++)features[i]||(window.location.href="/errors/not-supported.html");window.duo.disableMonetization=/[?&]utm_source=pwa_launch/.test(window.location.search),window.duo.l10n={strings:{},contextualVariableMapping:{}},window.duo.uiLanguage=window.duo.uiLanguage||"en",window.duo.version="1.315.0",window.duo.versionHash="fb024b29e4470f6a663e244341034974fdf7098d";var isAbc=/^\/abc/.test(window.location.pathname),HIDE_APP_SMART_BANNER_PATH=["/2022-campaigns","/share/sm","/share-direct/sm","/super","/plus","/getplus","/youtubeplus","/campaigns","/ios-super-purchase-flow","/ios-max-purchase-flow"],isWebToAppContext="webToApp"===new URLSearchParams(window.location.search).get("context");if(HIDE_APP_SMART_BANNER_PATH.includes(window.location.pathname)||isWebToAppContext)(el=document.querySelector("[name=apple-itunes-app]"))&&el.remove();else if(isAbc){var el;(el=document.querySelector("[name=apple-itunes-app]"))&&el.setAttribute("content","app-id=1440502568")}try{if(window.location.pathname.startsWith("/reset_password")&&window.location.search.includes("email=")){const e=new URLSearchParams(window.location.search);e.delete("email"),window.history.replaceState(null,"",`${window.location.pathname}?${e.toString()}`)}}catch(e){console.error("Error removing email query parameter on reset_password page",e)}</script></body></html>No TLS-RPT record found. Without it, you do not learn when receivers fail to enforce STS against your domain.
for duolingo.com
The id is an opaque string. Bump it whenever you change the policy file, otherwise receivers will keep using the cached version.
_mta-stsv=STSv1; id=20260514225340TLS-RPT lets receivers send you JSON reports when STS / DANE fails. Point the rua at a mailbox you actually monitor.
_smtp._tlsv=TLSRPTv1; rua=mailto:[email protected]Host the file below at https://mta-sts.duolingo.com/.well-known/mta-sts.txt with a trusted TLS cert (no self-signed). Replace the mx: line(s) with each of your real mail servers. Start with mode: testing to collect TLS-RPT failure reports before raising to mode: enforce.
version: STSv1 mode: testing mx: mail.duolingo.com max_age: 86400
Cloudflare Workers, Pages, or any static host with HTTPS can serve this. The well-known path needs a Content-Type of text/plain.
AI-assisted remediation
Wiredepth Pro sends this report to our AI engine and streams back a 30-day rollout plan tailored to duolingo.com, with provider-specific tips when we can infer them from the data. 10 playbooks per month on Pro, 100 on MSP.