This document describes the result objects returned by MTA-STS (Mail Transfer Agent Strict Transport Security) functions.
MTA-STS allows domain owners to declare that their mail servers support TLS and specify policies for message delivery. mailauth provides functions to fetch, parse, and validate MTA-STS policies.
const { getPolicy, validateMx } = require ( 'mailauth/lib/mta-sts' ) ;
The getPolicy function fetches and returns the MTA-STS policy for a domain.
const { policy, status } = await getPolicy ( 'example.com' , knownPolicy ) ;
Field
Type
Description
policy
object
The MTA-STS policy object (see below)
status
string
Policy retrieval status (see below)
Status
Description
found
New or updated policy was fetched successfully
not_found
No MTA-STS policy exists for the domain
renewed
Existing policy is still valid (ID unchanged, not expired)
errored
Policy discovery failed due to an error
Field
Type
Presence
Description
id
string|false
Always
Policy ID from DNS TXT record, or false if not found
version
string
Policy found
Always "STSv1" for valid policies
mode
string
Always
Policy mode (see below)
mx
string[]
Mode not "none"
Array of allowed MX hostnames (may include wildcards)
maxAge
number
Policy found
Policy validity period in seconds
expires
string
Policy found
ISO 8601 expiration timestamp
error
Error
On error
Error object if discovery failed
Mode
Description
testing
Policy is in test mode; report violations but don't enforce
enforce
Strictly enforce TLS and MX restrictions
none
No policy in effect
The validateMx function checks if an MX hostname is valid according to the MTA-STS policy.
const result = validateMx ( 'alt1.mx.example.com' , policy ) ;
Field
Type
Presence
Description
valid
boolean
Always
Whether the MX hostname is allowed
mode
string
Always
Policy mode ("testing", "enforce", or "none")
match
string
Valid match
The pattern that matched (exact hostname or wildcard)
testing
boolean
Always
Whether policy is in testing mode
{
"policy" : {
"id" : " 20240115T120000" ,
"version" : " STSv1" ,
"mode" : " enforce" ,
"mx" : [" mx1.example.com" , " mx2.example.com" , " *.mail.example.com" ],
"maxAge" : 86400 ,
"expires" : " 2024-01-16T12:00:00.000Z"
},
"status" : " found"
}
{
"policy" : {
"id" : false ,
"mode" : " none"
},
"status" : " not_found"
}
{
"policy" : {
"id" : " 20240115T120000" ,
"version" : " STSv1" ,
"mode" : " enforce" ,
"mx" : [" mx1.example.com" , " mx2.example.com" ],
"maxAge" : 86400 ,
"expires" : " 2024-01-16T12:00:00.000Z"
},
"status" : " renewed"
}
{
"policy" : {
"id" : " 20240115T120000" ,
"mode" : " none" ,
"expires" : " 2024-01-15T13:00:00.000Z" ,
"error" : {
"message" : " Request timeout for https://mta-sts.example.com/.well-known/mta-sts.txt" ,
"code" : " HTTP_SOCKET_TIMEOUT"
}
},
"status" : " errored"
}
MX Validation - Valid Match
{
"valid" : true ,
"mode" : " enforce" ,
"match" : " mx1.example.com" ,
"testing" : false
}
MX Validation - Wildcard Match
{
"valid" : true ,
"mode" : " enforce" ,
"match" : " .mail.example.com" ,
"testing" : false
}
{
"valid" : false ,
"mode" : " enforce" ,
"testing" : false
}
MX Validation - Testing Mode
{
"valid" : true ,
"mode" : " testing" ,
"match" : " mx1.example.com" ,
"testing" : true
}
MX Validation - No Policy
{
"valid" : true ,
"mode" : " none" ,
"testing" : false
}
Errors that may appear in policy.error:
Code
Description
multi_sts_records
Multiple TXT records found for _mta-sts.{domain}
invalid_sts_version
Policy file has invalid or missing version field
invalid_sts_mode
Policy file has invalid mode value
invalid_sts_max_age
Policy file has invalid max_age value
invalid_sts_mx
Policy file missing mx field in enforce/testing mode
HTTP_SOCKET_TIMEOUT
HTTP request timed out
http_status_{code}
HTTP request returned non-2xx status
ENOTFOUND
DNS lookup failed (domain not found)
ENODATA
DNS lookup returned no data
const { getPolicy, validateMx } = require ( 'mailauth/lib/mta-sts' ) ;
// Fetch policy
const { policy, status } = await getPolicy ( 'gmail.com' ) ;
console . log ( `Policy status: ${ status } ` ) ;
console . log ( `Policy mode: ${ policy . mode } ` ) ;
if ( policy . mode !== 'none' ) {
// Validate MX hostname
const mx = 'alt1.gmail-smtp-in.l.google.com' ;
const validation = validateMx ( mx , policy ) ;
if ( ! validation . valid && ! validation . testing ) {
console . error ( `MX ${ mx } is not allowed by MTA-STS policy` ) ;
// Reject delivery attempt
} else if ( ! validation . valid && validation . testing ) {
console . warn ( `MX ${ mx } violates MTA-STS policy (testing mode)` ) ;
// Report violation but continue
} else {
console . log ( `MX ${ mx } is allowed` ) ;
}
}