Yahoo!知恵袋の回答受付中の質問に勝手に答えるコーナーです。
今回の質問は、
GASを利用したシート更新通知スクリプト
Google App Scriptを利用して、スプレッドシート内の特定の列に指定した値が入力されたとき、リアルタイムで簡単な通知メールが届くようにしたいと考えています
シート【やおやさん】内の【しなもの】列に
【りんご】もしくは【みかん】と入力された場合
アドレス【sample@gmail.com】に向けて以下の内容の通知メールを送りたい宛先:sample@gmail.com
件名:新着情報
本文:【りんご(もしくはみかん)】 もぎたて新鮮!このような場合、どのようなスクリプトを組めばよいのかご教示願います
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13218527633
何卒宜しくお願いいたします
回答
まず、サンプルのスプレッドシートは下記です。
GAS でスクリプトを作成してみました。
まず、getShinamonoColumnIndex() で “しなもの” 列のインデックスを取得します。
各セルが編集されると onEdit() が呼ばれます。
onEdit() は、手動でトリガーを設定する必要なく、定義するだけで自動で呼ばれるようになります。
onEdit() のなかで、編集された列が “しなもの” 列で、かつ、入力された値が “りんご” もしくは “みかん” だった場合、notify() でメールを送ります。
ただ、作ったのですが、メールが送信されません。
ログを出してみると、次のエラーが発生していました。
Exception: スクリプトにはその操作を行う権限がありません。その操作を行うには 「(https://www.googleapis.com/auth/gmail.send || https://www.googleapis.com/auth/gmail.compose || https://www.googleapis.com/auth/gmail.modify || https://mail.google.com/ || https://www.googleapis.com/auth/gmail.addons.current.action.compose)」権限が必要です。
エラーの原因は、
They cannot access services that require authorization. For example, a simple trigger cannot send an email because the Gmail service requires authorization, but a simple trigger can translate a phrase with the Language service, which is anonymous.
https://developers.google.com/apps-script/guides/triggers#restrictions
とあるように、simple trigger は Gmail service にアクセスできないようです。
残念。
まとめ
というわけで、simple trigger から Gmail service にはアクセスできませんでした。
回避策が思いついたらアップデートしたいと思います。