【PowerShell】メール受信トレイを監視して条件付きで自動返信する方法

【PowerShell】メール受信トレイを監視して条件付きで自動返信する方法 PowerShell

特定の条件に一致するメールが届いたとき、自動で返信したいというニーズは多くあります。たとえば「問い合わせメールへの自動応答」や「社内申請メールへの受付通知」など、OutlookとPowerShellを組み合わせれば簡単に実現可能です。この記事では、受信トレイを定期監視して、特定の条件に合致したメールに対し自動で返信するスクリプトを紹介します。

前提条件

  • Outlookがローカルにインストールされていること
  • PowerShellはユーザーセッションで実行する必要がある(Outlook COMを使用するため)

基本構成:Outlook受信トレイにアクセスする


$outlook = New-Object -ComObject Outlook.Application
$namespace = $outlook.GetNamespace("MAPI")
$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$messages = $inbox.Items.Restrict("[UnRead] = true")

ここでは未読メールを対象にしています。

条件付きで自動返信する例(件名に「申請」が含まれる)


foreach ($mail in $messages) {
    if ($mail.Subject -like "*申請*") {
        $reply = $mail.Reply()
        $reply.Subject = "【自動返信】申請を受け付けました"
        $reply.Body = "この度はご連絡ありがとうございます。申請内容を確認のうえ、担当者よりご連絡いたします。" + "`r`n`r`n---`r`n" + $mail.Body
        $reply.Send()

        # 返信後は既読にする(必要に応じて)
        $mail.UnRead = $false
        $mail.Save()
    }
}

差出人メールアドレスでフィルタする場合


if ($mail.SenderEmailAddress -like "*@example.com") {
    # 処理を実行
}

返信ログを残す例


$log = "C:\Logs\auto_reply_log.txt"
Add-Content -Path $log -Value "$(Get-Date -Format "u") - Replied to: $($mail.SenderEmailAddress) Subject: $($mail.Subject)"

定期的に実行するには

このスクリプトを .ps1 ファイルとして保存し、「タスクスケジューラ」に設定することで、5分ごと・10分ごとの自動実行も可能です。ただし、Outlookが起動している状態でなければCOMアクセスできないため注意してください。

補足:受信後すぐに返信したい場合

リアルタイム性を求める場合は、Outlookの「ルール」+「スクリプト」や「Outlook VBAマクロ」と連携させる方法もありますが、PowerShellでのポーリング監視が簡単です。

まとめ

PowerShellとOutlookを組み合わせれば、メール受信トレイの監視と条件付き自動返信をシンプルに実現できます。定期バッチや軽量なワークフローの自動化として非常に有用です。ルールベースの処理やログ出力、CSV連携と組み合わせれば、問い合わせ対応の効率化にもつながります。