Google App Scriptでスプレッドシートの入力イベントでメールを送る方法(実現不可)

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 にはアクセスできませんでした。

回避策が思いついたらアップデートしたいと思います。