GASの自動化処理でエラーが発生した場合、自分宛てにメールを送信してみようと思った時のメモ。
ソースコード
関数名とか変数名とかファイル名はこだわらないタイプです。
error.gs
// わざとエラーを出す関数
function getErrorValue() {
// 現在のシートを取得
const Sheet = SpreadsheetApp.getActiveSheet();
try {
// A0のセルを取得→A0セルは存在しないため、エラーが発生する
Sheet.getRange("A0").getValue();
} catch (e) {
// エラー発生時にメールを送信
sendErrorMail(e);
}
}
// エラーメールを送信
function sendErrorMail(Error) {
GmailApp.sendEmail(
"**********@gmail.com", //←宛先アドレス
"自動化の処理でエラーが発生しました", //←タイトル
getMailBody(Error), //←メール本文
{
name: "自動返信アカウント"
}
);
}
// メール送信時の本文を作成
function getMailBody(Error) {
// 今日の日付
const DateObj = new Date();
const Today = Utilities.formatDate(DateObj, 'Asia/Tokyo', 'yyyy年MM月dd日 hh時mm分ss秒');
return Body = `
自動化スクリプトでエラーが発生しました。
担当者の方は至急確認をお願いします。
〇エラー内容
${Error}
〇エラー発生時刻
${Today}
以上です。
`
}
関数の流れは
①getErrorValue()
を実行
②スプレッドシートのA0セルの値を取得
③A0セルは存在しないので、エラーが発生
④エラーをcatch!!!
⑤sendErrorMail(Error)
を実行する。この時エラー分を引数に渡す
⑥GmailApp.sendEmail
で宛先、タイトル、本文を決める
※nameはなくても良いので省略
⑦getMailBody(Error)
でメール本文をreturn
⑧送信完了
実際はSheet.getRange("A0").getValue();
の中にメイン処理を入れる。
また、catchの後ろにfinally
を入れることで、エラーの有無に関わらず実行する処理を追加できる。
今回はメール本文をgetMailBody()
で取得しているが、スプレッドシートにエラー分を定義しておいてそれを取得してくるのも良い気がする。何故なら、発生したエラー毎にメール本文を分岐で選択しやすくなるから。