LoginSignup
1
1

(Office 365) Exchange Online にてメールが外部送信できているか確認するスクリプト

Last updated at Posted at 2023-10-05

利用者より相手にメールが届いているか確認して欲しいという依頼がありましたので PowerShell のコマンドを作成しました。

メールが外部送信できているか確認するスクリプト

◆使い方

  1. 宛先の情報を入力(任意)
    ※空にした場合はすべてのメールが対象になります。

  2. 差出人の情報を入力(必須)
    ※自ドメインのメールアドレスにしてください。

  3. 検索範囲を入力(必須)
    ※Get-MessageTraceDetail は過去10日までしか遡れません。それ以上の日は指定しないでください。

  4. スクリプトを実行

test.ps1
# 宛先の情報を入力する(任意)
$RecipientAddress = '宛先メールアドレスを記入'

# 差出人の情報を入力する(必須)
$SenderAddress = '差出人メールアドレスを記入'

# 検索範囲を入力する(必須)
$StartDate = (Get-Date).AddDays(-10)
$EndDate   = (Get-Date)

# メールアドレスをドメインパートとローカルパートに分ける
$LocalPart  = $SenderAddress.Split("@")[0]  # 出力するファイル名に利用
$DomainPart = $SenderAddress.Split("@")[1]  # 組織内の配信を除外するのに利用

# Get-MessageTrace のオプションを作成する
$MessageTraceOptions = @{
    "RecipientAddress" = $RecipientAddress
    "SenderAddress"    = $SenderAddress
    "StartDate"        = $StartDate
    "EndDate"          = $EndDate
}

# 宛先が存在しない場合はオプションから除外する
if ($RecipientAddress -notlike "*@*" -or $RecipientAddress -eq $null ) {
    $MessageTraceOptions.Remove("RecipientAddress")
}

# Get-MessageTrace の結果を変数に入れる
# ※Mmessage Trace ID の取得が目的
# ※この時、組織内の配送は除外する
$messageTrace = Get-MessageTrace @MessageTraceOptions | Where-Object {$_.RecipientAddress -notlike "*@$DomainPart"}

# 繰り返す
$messageTrace | ForEach-Object {

    # Get-MessageTrace の要素を取り出す
    $tmpSubject          = $_.Subject
    $tmpSenderAddress    = $_.SenderAddress
    $tmpRecipientAddress = $_.RecipientAddress
    $tmpReceived         = $_.Received
    
    # Get-MessageTraceDetail のオプションを作成する
    $MessageTraceDetailOptions = @{
        "MessageTraceId"   = $_.MessageTraceId
        "RecipientAddress" = $tmpRecipientAddress
        "StartDate"        = $StartDate
        "EndDate"          = $EndDate
    }

    Get-MessageTraceDetail @MessageTraceDetailOptions | 
        Select-Object @{Label="Subject";Expression={$tmpSubject}}, @{Label="SenderAddress";Expression={$tmpSenderAddress}}, @{Label="RecipientAddress";Expression={$tmpRecipientAddress}}, @{Label="Received";Expression={$tmpReceived}}, Date, Event, Action, Detail, MessageId, MessageTraceId

} | Export-Csv -Append -Path $ENV:USERPROFILE\Desktop\Get-MessageTraceDetail_$($LocalPart)_$(Get-Date -Format "yyyyMMdd").csv -Encoding Default -NoTypeInformation

◆結果
結果はデスクトップに 「Get-MessageTraceDetail_差出人_yyyyMMdd.csv」 というファイルが出力されます。
内容は下記となります。

項目 意味
Subject 件名
SenderAddress 差出人
RecipientAddress 宛先
Received メッセージが受信した日時
Date メッセージが処理された日時
Event イベント
Action メッセージに対して実行されたアクション
Detail メッセージトレースイベントの詳細情報
MessageId メッセージの一意の識別子
MessageTraceId メッセージトレースの一意の識別子

Event 列に 「外部に送信」 があれば外部送信されています。

注意
※外部送信≠相手に届いたですのでご注意ください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1