【PowerShell】メール本文から特定の情報を抽出してログ出力する方法

【PowerShell】メール本文から特定の情報を抽出してログ出力する方法 PowerShell

Outlookに届く定型メールの中から、特定のキーワードやパターンを含む情報だけを抽出し、ログファイルに記録したいというケースは多くあります。PowerShellを使えば、Outlookのメール本文を解析し、必要な情報をログファイルとして自動出力することができます。この記事ではその実装手順を解説します。

Outlookのメール本文を取得する準備

まず、PowerShellでOutlookの受信トレイを操作できるようにCOMオブジェクトを使って接続します。

$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNamespace("MAPI")
$inbox = $namespace.GetDefaultFolder(6)  # 6 = 受信トレイ

メール本文からキーワードを抽出するスクリプト

以下のスクリプトは、未読メールを対象に「請求金額」などのキーワードが含まれる行を抜き出し、ログファイルに出力します。

$logPath = "C:\MailLogs\log.txt"
if (!(Test-Path (Split-Path $logPath))) {
    New-Item -Path (Split-Path $logPath) -ItemType Directory
}

$messages = $inbox.Items.Restrict("[UnRead] = true")

foreach ($mail in $messages) {
    $body = $mail.Body

    # 正規表現で金額情報を抽出(例:「請求金額:123,456円」)
    if ($body -match "請求金額[::]\s*([\d,]+)円") {
        $amount = $matches[1]
        $logEntry = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 件名: $($mail.Subject) - 金額: $amount"
        Add-Content -Path $logPath -Value $logEntry

        # メールを既読にする
        $mail.UnRead = $false
        $mail.Save()
    }
}

このスクリプトでは、本文中の「請求金額:○○円」という形式の情報を正規表現で抜き出してログに記録します。実際の業務では「受付番号」「担当者名」「日時」など、他の情報にも応用可能です。

他のパターンを抽出する方法

以下のように、複数のパターンを定義して同時に抽出することも可能です。

# 例:受付番号の抽出
if ($body -match "受付番号[::]\s*(\w+)") {
    $id = $matches[1]
    Add-Content -Path $logPath -Value "受付番号: $id"
}

タスクスケジューラで定期実行

このスクリプトを毎日実行することで、受信メールの内容を自動でログに蓄積できます。以下のようなコマンドで実行します。

powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\ExtractMailInfo.ps1"

タスクスケジューラにこのコマンドを設定しておけば、夜間や業務開始時などに自動処理されます。

まとめ

PowerShellを使えば、Outlookのメール本文から特定の情報を抽出し、自動でログ出力する処理を簡単に構築できます。業務メールの確認・集計を自動化することで、ヒューマンエラーの削減や作業効率の向上が期待できます。必要に応じて正規表現やフィルタ条件をカスタマイズし、自社の業務フローに合わせた処理に発展させていきましょう。