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