Forum Discussion

Harm_Veenstra's avatar
Jun 19, 2022

Blogpost - Get-MailDomainInfo function for retrieving all email DNS records

Wrote a blogpost about it, but this is the Function I made to get all the email dns records in a convenient way. (Saves time querying mxtoolbox.com 😉 )

 

 

 

 

function Get-MailDomainInfo {
    param(
        [parameter(Mandatory = $true)][string]$DomainName,
        [parameter(Mandatory = $false)][string]$DNSserver
    )
     
    #Use DNS server 1.1.1.1 when parameter DNSserver is not used
    if (-not ($DNSserver)) {
        $DNSserver = '1.1.1.1'
    }
 
    #Retrieve all mail DNS records
    $autodiscoverA = (Resolve-DnsName -Name "autodiscover.$($domainname)" -Type A -Server $DNSserver -ErrorAction SilentlyContinue).IPAddress
    $autodiscoverCNAME = (Resolve-DnsName -Name "autodiscover.$($domainname)" -Type CNAME -Server $DNSserver -ErrorAction SilentlyContinue).NameHost
    $dkim1 = Resolve-DnsName -Name "selector1._domainkey.$($domainname)" -Type CNAME -Server $DNSserver -ErrorAction SilentlyContinue
    $dkim2 = Resolve-DnsName -Name "selector2._domainkey.$($domainname)" -Type CNAME -Server $DNSserver -ErrorAction SilentlyContinue
    $domain = Resolve-DnsName -Name $DomainName -Server $DNSserver -ErrorAction SilentlyContinue
    $dmarc = (Resolve-DnsName -Name "_dmarc.$($DomainName)" -Type TXT -Server $DNSserver -ErrorAction SilentlyContinue).Strings
    $mx = (Resolve-DnsName -Name $DomainName -Type MX -Server $DNSserver -ErrorAction SilentlyContinue).NameExchange
    $spf = (Resolve-DnsName -Name $DomainName -Type TXT -Server $DNSserver -ErrorAction SilentlyContinue | Where-Object Strings -Match 'v=spf').Strings
 
    #Set variables to Not enabled or found if they can't be retrieved
    #and stop script if domainname is not valid 
    $errorfinding = 'Not enabled'
    if ($null -eq $domain) {
        Write-Warning ("{0} not found" -f $DomainName)
        return
    }
 
    if ($null -eq $dkim1 -and $null -eq $dkim2) {
        $dkim = $errorfinding
    }
    else {
        $dkim = "$($dkim1.Name) , $($dkim2.Name)"
    }
 
    if ($null -eq $dmarc) {
        $dmarc = $errorfinding
    }
 
    if ($null -eq $mx) {
        $mx = $errorfinding
    }
 
    if ($null -eq $spf) {
        $spf = $errorfinding
    }
 
    if (($autodiscoverA).count -gt 1) {
        $autodiscoverA = $errorfinding
    }
 
    if ($null -eq $autodiscoverCNAME) {
        $autodiscoverCNAME = $errorfinding
    }
 
    $info = [PSCustomObject]@{
        'Domain Name'             = $DomainName
        'Autodiscover IP-Address' = $autodiscoverA
        'Autodiscover CNAME '     = $autodiscoverCNAME
        'DKIM Record'             = $dkim
        'DMARC Record'            = "$($dmarc)"
        'MX Record(s)'            = $mx -join ', '
        'SPF Record'              = "$($spf)"
    }
         
    return $info
      
}

 

 

 

(https://powershellisfun.com)

No RepliesBe the first to reply

Resources