Get Email DNS Records PowerShell Code
title: ## Contents
style: nestedList # TOC style (nestedList|inlineFirstLevel)
minLevel: 1 # Include headings from the specified level
maxLevel: 4 # Include headings up to the specified level
includeLinks: true # Make headings clickable
debugInConsole: false # Print debug info in Obsidian console
Overview
Sources:
- **
Code Snippet
function Get-MailDomainInfo {
param(
[parameter(Mandatory = $true)][string[]]$DomainName,
[parameter(Mandatory = $false)][string]$DNSserver = '1.1.1.1'
)
$info = foreach ($domain in $DomainName) {
#Check if domain name is valid, output warning it not and continue to the next domain (if any)
try {
Resolve-DnsName -Name $domain -Server $DNSserver -ErrorAction Stop | Out-Null
#Retrieve all mail DNS records
$autodiscoverA = (Resolve-DnsName -Name "autodiscover.$($domain)" -Type A -Server $DNSserver -ErrorAction SilentlyContinue).IPAddress
$autodiscoverCNAME = (Resolve-DnsName -Name "autodiscover.$($domain)" -Type CNAME -Server $DNSserver -ErrorAction SilentlyContinue).NameHost
$dkim1 = Resolve-DnsName -Name "selector1._domainkey.$($domain)" -Type CNAME -Server $DNSserver -ErrorAction SilentlyContinue
$dkim2 = Resolve-DnsName -Name "selector2._domainkey.$($domain)" -Type CNAME -Server $DNSserver -ErrorAction SilentlyContinue
$dmarc = (Resolve-DnsName -Name "_dmarc.$($domain)" -Type TXT -Server $DNSserver -ErrorAction SilentlyContinue | Where-Object Strings -Match 'DMARC').Strings
$mx = (Resolve-DnsName -Name $domain -Type MX -Server $DNSserver -ErrorAction SilentlyContinue).NameExchange
$spf = (Resolve-DnsName -Name $domain -Type TXT -Server $DNSserver -ErrorAction SilentlyContinue | Where-Object Strings -Match 'v=spf').Strings
$includes = (Resolve-DnsName -Name $domain -Type TXT -Server $DNSserver -ErrorAction SilentlyContinue | Where-Object Strings -Match 'v=spf').Strings -split ' ' | Select-String 'Include:'
#Set variables to Not enabled or found if they can't be retrieved
$errorfinding = 'Not enabled'
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 ($null -eq $autodiscoverCNAME) {
$autodiscoverCNAME = $errorfinding
}
if (($autodiscoverA).count -gt 1 -or $null -ne $autodiscoverCNAME) {
$autodiscoverA = $errorfinding
}
if ($null -eq $includes) {
$includes = $errorfinding
}
else {
$foundincludes = foreach ($include in $includes) {
if ((Resolve-DnsName -Server $DNSserver -Name $include.ToString().Split(':')[1] -Type txt -ErrorAction SilentlyContinue).Strings) {
[PSCustomObject]@{
SPFIncludes = "$($include.ToString().Split(':')[1]) : " + $(Resolve-DnsName -Server $DNSserver -Name $include.ToString().Split(':')[1] -Type txt).Strings
}
}
else {
[PSCustomObject]@{
SPFIncludes = $errorfinding
}
}
}
}
[PSCustomObject]@{
'Domain Name' = $domain
'Autodiscover IP-Address' = $autodiscoverA
'Autodiscover CNAME ' = $autodiscoverCNAME
'DKIM Record' = $dkim
'DMARC Record' = "$($dmarc)"
'MX Record(s)' = $mx -join ', '
'SPF Record' = "$($spf)"
'SPF Include values' = "$($foundincludes.SPFIncludes)" -replace "all", "all`n`b"
}
}
catch {
Write-Warning ("{0} not found" -f $domain)
}
}
return $info
}
Details
About
This note is about …
See Also
Appendix
Note created on 2024-05-08 and last modified on 2024-05-08.
Backlinks
LIST FROM [[PowerShell - Get Email DNS Records]] AND -"CHANGELOG" AND -"04-RESOURCES/Code/PowerShell/PowerShell - Get Email DNS Records"
(c) No Clocks, LLC | 2024