source/02_ExchangeOnline/Get-ExchangeMailFlow.ps1

Function Get-ExchangeMailFlowStatus {
    [CmdletBinding()]
    param (
        [Parameter()]
        [int]
        $ReportPeriod = 7,

        [Parameter()]
        [switch]
        $Summary
    )

    if (!(IsExchangeConnected)) {
        SayError 'Exchange PowerShell is not connected. Connect to Exchange Online PowerShell first and try again.'
        return $null
    }

    if ($ReportPeriod -gt 90) {
        SayInfo 'Maximum mail flow data history is 90 days.'
        $ReportPeriod = 90
    }

    $now = (Get-Date)
    $startDate = $now.AddDays(-$ReportPeriod)

    try {
        $mailTrafficData = Get-MailFlowStatusReport -StartDate $startDate.ToUniversalTime() -EndDate $now.ToUniversalTime() -Direction Inbound, Outbound -ErrorAction Stop

        if ($Summary) {
            return $(
                [PSCustomObject][ordered]@{
                    'Total Messages'             = ($mailTrafficData | Measure-Object MessageCount -Sum).Sum
                    'Inbound'                    = ($mailTrafficData | Where-Object { $_.Direction -eq "Inbound" } | Measure-Object MessageCount -Sum).Sum
                    'Outbound'                   = ($mailTrafficData | Where-Object { $_.Direction -eq "Outbound" } | Measure-Object MessageCount -Sum).Sum
                    'Blocked by Edge Protection' = ($mailTrafficData | Where-Object { $_.EventType -eq "EdgeBlockSpam" } | Measure-Object MessageCount -Sum).Sum
                    'Malware Email'              = ($mailTrafficData | Where-Object { $_.EventType -eq "EmailMalware" } | Measure-Object MessageCount -Sum).Sum
                    'Spam Email'                 = ($mailTrafficData | Where-Object { $_.EventType -eq "SpamDetections" } | Measure-Object MessageCount -Sum).Sum
                    'Phishing Email'             = ($mailTrafficData | Where-Object { $_.EventType -eq "EmailPhish" } | Measure-Object MessageCount -Sum).Sum
                    'Good Mail'                  = ($mailTrafficData | Where-Object { $_.EventType -eq "GoodMail" } | Measure-Object MessageCount -Sum).Sum
                    'Triggered Transport Rules'  = ($mailTrafficData | Where-Object { $_.EventType -eq "TransportRules" } | Measure-Object MessageCount -Sum).Sum
                }
            )
        }
        else {
            return $mailTrafficData
        }

    }
    catch {
        SayError $_.Exception.Message
        return $null
    }
}