2026年2月10日火曜日

Outlook の受信トレイにあるメールを検索する Powershell

Outlook の受信トレイにあるメールを検索する Powershell

概要

タイトル通り

環境

  • Windows 11

スクリプト

param(
    [string]$Keyword = "test",
    [switch]$SearchBody = $false
)

try {
    Write-Host "Connecting to Outlook..."

    $ErrorActionPreference = "Stop"

    $Outlook = New-Object -ComObject Outlook.Application
    $Namespace = $Outlook.GetNamespace("MAPI")
    $Namespace.Logon()

    $Inbox = $Namespace.GetDefaultFolder(6)

    Write-Host "Searching in $($Inbox.Name)"
    Write-Host "Keyword: $Keyword"
    Write-Host "Search Body: $SearchBody"

    $Items = $Inbox.Items
    Write-Host "Total items: $($Items.Count)"

    $FoundItems = @()
    $count = 0
    foreach ($Item in $Items) {
        $count++
        if ($count % 100 -eq 0) {
            Write-Host "Processing item $count..."
        }
        if ($SearchBody) {
            if ($Item.Subject -match $Keyword -or $Item.Body -match $Keyword) {
                $FoundItems += $Item
            }
        }
        else {
            if ($Item.Subject -match $Keyword) {
                $FoundItems += $Item
            }
        }
    }

    Write-Host "Found: $($FoundItems.Count) emails"

    if ($FoundItems.Count -gt 0) {
        foreach ($MailItem in $FoundItems) {
            Write-Host "-----"
            Write-Host "Subject: $($MailItem.Subject)"
            Write-Host "Sender: $($MailItem.SenderName)"
            Write-Host "Received: $($MailItem.ReceivedTime)"
        }
    }
    else {
        Write-Host "No emails found."
    }

    if ($Inbox) { [System.Runtime.InteropServices.Marshal]::ReleaseComObject($Inbox) | Out-Null }
    if ($Namespace) { [System.Runtime.InteropServices.Marshal]::ReleaseComObject($Namespace) | Out-Null }
    if ($Outlook) { [System.Runtime.InteropServices.Marshal]::ReleaseComObject($Outlook) | Out-Null }

    Write-Host "Done."
}
catch {
    Write-Host "Error: $($_.Exception.Message)"
}

最後に

日本語で検索すると文字コードエラーになる場合があるのでその場合は検索キーワードを引数で受け取るようにしましょう
メールの件数が多いとかなり時間がかかるのでタイトルだけで検索するなどの工夫をしましょう
進捗がわかりづらい場合などがあるので 100件ずつ分割して検索してもいいと思います

0 件のコメント:

コメントを投稿