0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GASでエラーが発生した際にエラーメールを送信する方法

Last updated at Posted at 2021-09-08

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()で取得しているが、スプレッドシートにエラー分を定義しておいてそれを取得してくるのも良い気がする。何故なら、発生したエラー毎にメール本文を分岐で選択しやすくなるから。

実行結果

メールが届いた。
image.png

メール本文も普通だった。
image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?