質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.42%
Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1960閲覧

GASの自動メールがonEdit(e)でなぜか送付できない

jdshngy2

総合スコア1

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/03/26 04:51

実現したいこと

ここに実現したいことを箇条書きで書いてください。
・スプレッドシートに入力した内容と添付ファイル(Googleドライブ上にアップロードされているPDF)を
特定列に設置してあるチェックボックスにチェックが入ったらメールに添付して送付したい。
(※現在は仮作成のためTRUE/FALSEの条件設定をしていない状態となります)

前提

ここに質問の内容を詳しく書いてください。

Gメールがなぜか送信できません。
同じ内容をコピペした手動実行のコードでは動いています。
コードが間違っている(凡ミス)と思われますが、特定できません。

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

onEditの場合なぜか自動メール送信ができない。

該当のソースコード

GoogleAppsScript

1ソースコード 2function onEdit(e) { 3 4var ss = SpreadsheetApp.getActiveSpreadsheet(); 5var sheet = ss.getActiveSheet(); 6var range = sheet.getActiveRange(); 7 8var column = e.range.getColumn();//列の番号を取得 9var row = e.range.getRow();//行の番号を取得 10Browser.msgBox(column); 11Browser.msgBox(row); 12if (column == 6) { 13 14 Browser.msgBox("F列が変更されました") 15 16 var URL = sheet.getRange(2,5).getRichTextValue().getLinkUrl(); 17 18 var id = URL.split('/d/')[1].split('/')[0]; 19 Browser.msgBox(id); 20 //メール処理 21 var address = sheet.getRange(row,2).getValue(); 22//Browser.msgBox(address); 23 var subject = sheet.getRange(row,3).getValue(); 24 //Browser.msgBox(subject); 25 var body = sheet.getRange(row,4).getValue(); 26 //Browser.msgBox(body); 27 //Browser.msgBox(id); 28 29 var pdf = DriveApp.getFileById(id).getBlob(); 30 31 var options = {attachments:pdf}; 32 GmailApp.sendEmail(address,subject,body,options) 33 Browser.msgBox("メールを送信しました");

試したこと

onEditでないバージョンも作りましたが、そちらはメール送信できました。

function sendMail() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet();  var address = sheet.getRange(2,2).getValue(); Browser.msgBox(address); var subject = sheet.getRange(2,3).getValue(); Browser.msgBox(subject); var body = sheet.getRange(2,4).getValue(); var URL = sheet.getRange(2,5).getRichTextValue().getLinkUrl(); var id = URL.split('/d/')[1].split('/')[0]; var pdf = DriveApp.getFileById(id).getBlob(); var options = {attachments:pdf}; GmailApp.sendEmail(address,subject,body,options) }

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

ここにより詳細な情報を記載してください。
・もしご確認をいただける方がおりましたら、ご返信をお願いいたします。

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

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

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

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

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

YAmaGNZ

2023/03/26 06:03

権限が足りずにGmailApp.sendEmailが実行できないのでは?
guest

回答1

0

ベストアンサー

onEdit関数は、スプレッドシートの編集時にトリガーされるため、スクリプトからのメール送信がブロックされている可能性があります。セキュリティ上の理由から、Googleはユーザーが承認した場合以外はスクリプトからの自動メール送信をブロックしています。

代わりに、スプレッドシートから手動で実行した場合にのみメールが送信されるように、スクリプトを変更してみてください。例えば、特定のセルに日時を入力した場合にスクリプトを実行するトリガーを設定し、スクリプトが自動的にメールを送信するようにします。

以下は、トリガーを設定してonTrigger関数を実行し、メールを送信する例です。

Copy code function onTrigger() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var range = sheet.getActiveRange(); var column = range.getColumn(); var row = range.getRow(); if (column == 6) { var URL = sheet.getRange(2, 5).getRichTextValue().getLinkUrl(); var id = URL.split('/d/')[1].split('/')[0]; var address = sheet.getRange(row, 2).getValue(); var subject = sheet.getRange(row, 3).getValue(); var body = sheet.getRange(row, 4).getValue(); var pdf = DriveApp.getFileById(id).getBlob(); var options = {attachments: pdf}; GmailApp.sendEmail(address, subject, body, options); } }

この関数をトリガーとして設定するには、以下の手順を実行します。

スクリプトエディタを開きます。
「編集」→「現在のプロジェクトのトリガー」を選択します。
「+トリガーを追加」ボタンをクリックします。
トリガーを設定するための画面が表示されるので、以下の設定を行います。
実行する関数: onTrigger
実行するイベントのソース: スプレッドシート
実行するイベントの種類: 編集後
トリガーを有効にして保存します。
このようにトリガーを設定することで、スプレッドシートの特定の列が変更された場合に自動的にメールを送信するようになります。

投稿2023/03/26 06:28

ai-bot1

総合スコア18

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

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

jdshngy2

2023/03/26 06:50

ai-bot1様 詳しく解説をいただきありがとうございます!ほぼ同タイミングでしたが、今後同様の質問検索があることも考え こちらをベストアンサーとさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.42%

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

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

質問する

関連した質問