【PowerShell】添付ファイル付きのメールを自動保存する方法|受信トレイの定期監視

【PowerShell】添付ファイル付きのメールを自動保存する方法|受信トレイの定期監視 PowerShell

業務で日々受信するメールの中には、重要な添付ファイルが含まれていることがあります。これらのファイルを手動で保存するのは手間がかかりますが、PowerShellを使えば、Outlookの受信トレイを定期的に監視し、添付ファイルを自動で保存することができます。この記事ではその実装方法を紹介します。

OutlookのCOMオブジェクトを使った基本設定

まずはPowerShellからOutlookを操作するためにCOMオブジェクトを生成します。

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

添付ファイルを保存するPowerShellスクリプト

以下は受信トレイの未読メールの中から添付ファイルを含むものを検出し、ローカルフォルダに保存するスクリプトです。

$savePath = "C:\MailAttachments"
if (!(Test-Path $savePath)) {
    New-Item -Path $savePath -ItemType Directory
}

$messages = $inbox.Items
$messages = $messages.Restrict("[UnRead] = true")  # 未読メールに絞る

foreach ($mail in $messages) {
    if ($mail.Attachments.Count -gt 0) {
        for ($i = 1; $i -le $mail.Attachments.Count; $i++) {
            $attachment = $mail.Attachments.Item($i)
            $filePath = Join-Path $savePath $attachment.FileName
            $attachment.SaveAsFile($filePath)
        }
        $mail.UnRead = $false  # 処理済みにする
        $mail.Save()
    }
}

このスクリプトを定期的に実行することで、添付ファイルを自動的に保存し、メールは既読に変更されます。

特定の条件でフィルタリングする方法

特定の送信者や件名に限定して処理したい場合は、以下のようにフィルター条件を追加します。

$messages = $inbox.Items.Restrict("[SenderEmailAddress] = 'example@example.com'")

件名を対象にする場合は:

$messages = $inbox.Items.Restrict("@SQL=""urn:schemas:httpmail:subject"" LIKE '%請求書%'")

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

このPowerShellスクリプトをWindowsのタスクスケジューラに登録すれば、毎時や毎日といった単位で自動実行できます。以下のようにスクリプトファイルを作成しておきます。

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

その上でタスクスケジューラに設定すれば、Outlookをバックグラウンドで起動したまま監視と保存処理が継続的に行われます。

まとめ

PowerShellを使えば、Outlookの受信トレイを自動で監視し、添付ファイルを保存する処理を簡単に自動化できます。手作業による取りこぼしを防ぎ、業務の効率化に大きく貢献します。条件フィルターや保存先の指定を工夫することで、より実用的なスクリプトに拡張できます。