【bat】エラー発生時だけ通知メールを送信する仕組みの作り方(SMTP連携・ログ監視)

【bat】エラー発生時だけ通知メールを送信する仕組みの作り方(SMTP連携・ログ監視) bat

バッチファイルを使ってバックアップやデータ処理を自動化していると、「何か問題が起きたときだけ通知が欲しい」と感じることがあります。そんなときに便利なのが、エラー発生時にだけメールで通知を送信する仕組みです。

本記事では、SMTP対応のコマンドラインツール(例:Blat)を使い、バッチファイルからエラー通知メールを送信する方法と、ログファイル監視による通知の自動化について解説します。

1. 必要なツール:Blatの導入

Blatは、WindowsのコマンドラインからSMTPメールを送信できるフリーのツールです。

事前準備:

  1. Blatをダウンロードして任意のフォルダに配置
  2. SMTP設定を登録(初回のみ)
blat -install smtp.example.com sender@example.com

上記でSMTPサーバーと送信元メールアドレスを登録します。

2. エラー発生時のみ通知を送るバッチの構成

処理対象のコマンドが失敗(エラーコードが 0 以外)だった場合のみ、メールを送信します。

基本構造:

@echo off

:: 処理実行
some_command.exe

:: エラーレベル判定
if errorlevel 1 (
  echo 処理に失敗しました。 | blat - -to notify@example.com -subject "【エラー通知】バッチ処理失敗" -body "バッチ処理でエラーが発生しました。ログをご確認ください。"
)

ポイント: errorlevel は「その値以上か」を判定するので、1以上のときのみ通知が実行されます。

3. 処理ログを出力し、内容に「ERROR」が含まれる場合のみ通知

より柔軟な運用として、「ログファイルに ‘ERROR’ という文字列が含まれるか」で通知を判断する方法もあります。

ログ監視スクリプトの例:

@echo off

:: ログファイルに処理結果を記録
myprocess.exe > output.log 2>&1

:: ERRORの有無をチェック
findstr /i "ERROR" output.log > nul
if %errorlevel%==0 (
  echo ログにエラーを検出しました。 | blat - -to notify@example.com -subject "【ログ監視】エラーを検出" -body "ログファイルにERRORが含まれています。"
)

findstr で検索結果が見つかれば errorlevel=0 になるため、その場合だけ通知します。

4. メール本文を外部ファイル化して可読性アップ

通知メールの本文を `.txt` ファイルに切り出すことで、より柔軟な通知内容が可能になります。

blat mail_body.txt -to notify@example.com -subject "【異常検知】バッチ失敗" -log blat_send.log

本文ファイル(mail_body.txt)にエラー詳細やログ内容を事前に書き込んでおくと、通知の質が上がります。

5. BlatのSMTP認証・ポート番号設定

BlatでSMTP認証が必要な場合、以下のように指定します:

blat - -to notify@example.com -subject "Test" -body "This is test" -server smtp.example.com:587 -u your_id -pw your_pass

セキュリティ上、パスワードのハードコーディングには注意が必要です。可能であれば実行用ユーザーを制限しましょう。

まとめ

バッチファイルとBlatなどの外部ツールを組み合わせることで、次のような監視・通知が実現できます。

  • バッチ処理が失敗したときだけ通知メールを送信
  • ログファイルに「ERROR」が含まれるかを自動判定
  • メール内容や送信条件の柔軟なカスタマイズが可能

バックアップ処理や自動実行スクリプトなど、放置しがちな処理のエラーに素早く気づくための仕組みとして、ぜひ導入を検討してみてください。