質問するログイン新規登録
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

787閲覧

メール送信で権限がないとエラーが出る。

I_d

総合スコア28

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2023/11/10 01:09

編集2023/11/10 02:10

0

1

実現したいこと

GASでメール送信機能を作成したい。

前提

GASで予約表を作っています。
Googleフォームから名前、貸出希望日を入力して送信後、スプレッドシートにフォームで入力したデータが入るようになっています。
スプレッドシートの一番右の列(G列)に承認or却下のプルダウンがあり、どちらかを選択すると
メールが送信される処理を作成ているのですが、権限がないとエラーが出力されます。

発生している問題・エラーメッセージ

メール送信後に発生するエラーメッセージです。

Exception: MailApp.sendEmail を呼び出す権限がありません。必要な権限: https://www.googleapis.com/auth/script.send_mail

該当のソースコード

メール.gs

function onEdit(e) { var editedSheet = e.range.getSheet(); // 変更が行われたシート var editedRange = e.range; // 変更が行われた範囲 var targetSheetName = "予約表"; // Switch予約表のシート名 var targetColumn = 6; // 6はE列を表します // Switch予約表のE列内の変更を監視 if (editedSheet.getName() === targetSheetName && editedRange.getColumn() === targetColumn) { // Browser.msgBox('成功'); let editedRow = editedRange.getRow(); // 変更があった行番号 var name = editedSheet.getRange("B" + editedRow).getDisplayValue(); // 名前 var rentalDay = editedSheet.getRange("C" + editedRow).getDisplayValue(); // 貸出日 var mailAddress = editedSheet.getRange("E" + editedRow).getDisplayValue(); // メールアドレス var oldValue = e.oldValue; // 変更前の値を取得 var editedValue = e.value; // 変更後の値を取得 if (editedValue=='承認') { var msg = Browser.msgBox("名前:"+name+"\\n貸出日:"+rentalDay+"\\nこちらの予約を承認しますか?", Browser.Buttons.YES_NO); if (msg=="yes") { try { MailApp.sendEmail(mailAddress, '予約完了のお知らせ', rentalDay+"の予約が承認されました"); Browser.msgBox('送信しました'); } catch(error) { console.log(error.name + ": " + error.message); console.log(mailAddress); console.log(rentalDay); } } } else if (editedValue=='却下') { var msg = Browser.inputBox("名前:"+name+"\\n貸出日:"+rentalDay+"\\nこちらの予約を却下しますか?", Browser.Buttons.YES_NO); if (msg) { try { MailApp.sendEmail(mailAddress, '予約却下のお知らせ', rentalDay+'の予約が却下されました。\\n却下理由:'+msg); Browser.msgBox('送信しました'); } catch(error) { console.log(error.name + ": " + error.message); console.log(mailAddress); console.log(rentalDay); console.log(msg); } } } } else { Browser.msgBox('エラー'); } }

appsscript.json

{ "timeZone": "Asia/Tokyo", "oauthScopes": [ "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", "https://www.googleapis.com/auth/script.send_mail" ], "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8" }

試したこと

https://qiita.com/hisayuki/items/725110707d8abc8796d8
https://nolyc.net/programming/gas-manifest/
https://imabari.hateblo.jp/entry/2018/10/27/173641

上記のサイトでもあるように
・"https://www.googleapis.com/auth/script.send_mail"
・"https://www.googleapis.com/auth/gmail.send",
をjsonファイルの"oauthScopes"に追加し、その後トリガーを削除→再登録しました。

また権限も付与されていることを確認ずみです。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YellowGreen

2023/11/20 23:08 編集

関数名がonEditなので通常のトリガーとonEditのシンプルなトリガーが競合しているのではないでしょうか。 シンプルなトリガーではメール送信や外部との通信はできないと思いますので、関数名をonEdit以外の名前(例えばsendMail(e)など)に変更の上、通常の「編集時」のトリガーで実行するようにしてメール送信できませんか?
I_d

2023/11/21 14:30

こちら関数名をonEdit→submitに変更したところメール送信されました! ありがとうございます。
guest

回答1

0

自己解決

こちら関数名を変更したところ、メールが送信されました。

投稿2023/11/21 14:31

I_d

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問