spf.ps1

function Get-SpfRecord() {
    param(
        [string]$domain
    )

    $spf = Resolve-DnsName -Name $domain -Type TXT -Server 1.1.1.1

    if ($spf) {
        $spf | Where-Object { $_.QueryType -eq "TXT" } | Select-Object -ExpandProperty Strings | Where-Object { $_ -like "v=spf1*" }
    }

    else {
        $spf = Resolve-DnsName -Name $domain -Type CNAME | Where-Object { $_.QueryType -eq "CNAME" } | Select-Object -ExpandProperty NameHost
        if ($spf) {
            Get-SpfRecord -domain $spf
        }
    }
}

function RecursiveSpfLookup() {
    param(
        [string]$domain
    )

    $spf = Get-SpfRecord -domain $domain

    if ($spf) {
        $spf = ($spf -split " ")
        $spfArr = $spf[1..($spf.Length - 2)]

        foreach ($record in $spfArr) {
            if ($record -like "include:*") {
                $domain = $record -replace "include:", ""
                RecursiveSpfLookup -domain $domain
            }
            else {
                $record
            }
        }
    }
}