バッチファイルを使ってバックアップやデータ処理を自動化していると、「何か問題が起きたときだけ通知が欲しい」と感じることがあります。そんなときに便利なのが、エラー発生時にだけメールで通知を送信する仕組みです。
本記事では、SMTP対応のコマンドラインツール(例:Blat)を使い、バッチファイルからエラー通知メールを送信する方法と、ログファイル監視による通知の自動化について解説します。
1. 必要なツール:Blatの導入
Blatは、WindowsのコマンドラインからSMTPメールを送信できるフリーのツールです。
事前準備:
- Blatをダウンロードして任意のフォルダに配置
- 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」が含まれるかを自動判定
- メール内容や送信条件の柔軟なカスタマイズが可能
バックアップ処理や自動実行スクリプトなど、放置しがちな処理のエラーに素早く気づくための仕組みとして、ぜひ導入を検討してみてください。