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

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

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

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

Q&A

解決済

2回答

1001閲覧

GASでアンケートフォームに回答されたら、その内容の一部を特定の人にメールしたいです。

sachi28

総合スコア2

Google Apps Script

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

0グッド

0クリップ

投稿2022/03/21 12:28

編集2022/03/30 10:23

GASでアンケートフォームに回答されたら、その内容の一部を特定の人にメールしたいです。

下記内容でトリガー(アンケートフォームに回答時にメール送信)を設定しても
上手くいきません。。。

色々試しましたがうまくいかず困っております。どなたかお力添えいただけませんでしょうか。

①これだと、アンケートフォーム送信時に無事メールは送られるのですが、
過去に回答したフォームの内容も全部メールされてしまいます。

function sendMail(e){

const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();;

const DOC_URL = 'https://docs.google.com/メール本文/edit';
const doc = DocumentApp.openByUrl(DOC_URL);
const docText = doc.getBody().getText();

const subject = '【テスト】';

const address = "sss@gmail.com,aaa@gmail.com";

for(let i = 2; i <= lastRow; i++){

const namae = sheet.getRange(i, 3).getValue(); 
const haizoku = sheet.getRange(i, 4).getValue();
const koumoku = sheet.getRange(i, 5).getValue();

const body = docText
.replace('{名前}',namae)
.replace('{配属}',haizoku)
.replace('{項目}',koumoku)

GmailApp.sendEmail(address, subject, body, {
name: '窓口',bcc: '',
attachments: []});
}

}

②これだとトリガーがエラーになります。

トリガーは「スプレッドシートから」「メール送信時に」「毎日受け取る」
エラーは「失敗しました」「タイムアウト」
です。

function sendsendMail(e){
var itemResponses = e.response.getItemResponses();

const DOC_URL = 'https://docs.google.com/メール本文/edit';
const doc = DocumentApp.openByUrl(DOC_URL);
const docText = doc.getBody().getText();

const subject = '【テスト】';

const address = "ooo@gmail.com,aa@gmail.com";

const namae = itemResponses[0].getResponse(); 
const haizoku = itemResponses[1].getResponse();
const koumoku = itemResponses[2].getResponse();

const body = docText
.replace('{名前}',namae)
.replace('{配属}',haizoku)
.replace('{項目}',koumoku)

GmailApp.sendEmail(address, subject, body, {
name: '窓口',bcc: '',
attachments: []});

}

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

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

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

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

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

macaron_xxx

2022/03/22 23:07

「上手くいきません」というのは何がどう上手くいかないのでしょうか。
sachi28

2022/03/23 00:11

閲覧ありがとうございます。 アンケートフォームを送信しても実行されないようで、"aaa@gmail.com,bbb@gmail.com"にメールが送信されません。。 var itemResponses = e.response.getItemResponses();を入れない場合はメールが送られるのですが、過去にアンケートフォームに回答されたものも全部送信されてしまいます。
macaron_xxx

2022/03/23 00:45

トリガーの設定はどのようにおこなっていますか? var itemResponses = e.response.getItemResponses(); を入れないのにエラーにならない理由がわかりません。
sachi28

2022/03/23 00:57

トリガーはイベントソース(スプレッドシートから)、イベントの種類(フォーム送信時)、エラー通知設定(毎日通知を受け取る)です。 エラーにならなかったときは下記のようにしていました。
sachi28

2022/03/23 01:05

function sendMail(e){ const sheet = SpreadsheetApp.getActiveSheet(); const lastRow = sheet.getLastRow();; const DOC_URL = 'https://docs.google.com/~~~~'; const doc = DocumentApp.openByUrl(DOC_URL); const docText = doc.getBody().getText(); const subject = '【テスト】'; const address = "aa@gmail.com,"; for(let i = 2; i <= lastRow; i++){ const namae = sheet.getRange(i, 3).getValue();  const haizoku = sheet.getRange(i, 4).getValue(); const koumoku = sheet.getRange(i, 5).getValue(); const body = docText .replace('{名前}',namae) .replace('{配属}',haizoku) .replace('{項目}',koumoku) GmailApp.sendEmail(address, subject, body, { name: '窓口',bcc: '', attachments: []}); } }
penguin520

2022/03/30 10:15

質問文のトリガーIDは消してください。危ないと思います。
guest

回答2

0

エラーにならなかったときは下記のようにしていました。

エラーにならなかったソースをみると、スプレッドシートからメールを送っているようですが、フォームから送信というのはグーグルフォームを送信したらメールがくるようにということですよね?
タイムアウトのエラーの時刻は、フォームの送信時刻と同じですか?エラーがでなかったとされるコードのfor文が無限ループしてたときにでたエラーではないでしょうかそれ???
本当にトリガーが設定されているのかをまず確認してください。もうすこし情報をいただければまた夜に回答します。

投稿2022/03/30 02:03

penguin520

総合スコア345

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

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

sachi28

2022/03/30 02:33

本当にありがとうございます。 フォームから送信というのはグーグルフォームを送信したらメールがくるように →はい、そうです。 タイムアウトのエラーの時刻は、フォームの送信時刻と同じ →同じになります。 今確認してみると、エラーにならなかったときは var itemResponses = e.response.getItemResponses(); を入れておらず、フォーム送信のタイミングで過去に回答されたものも全部メールされていました。 質問内容を 1 エラーでないが過去回答も全部メールされれる 2 エラーがでる 2つ掲載いたしました。 本当に助かります。どうぞよろしくお願いいたします。
penguin520

2022/03/30 02:40

なるほど。なにが起きてるのか知りたいので、今夜、質問にあるコードを実際に走らせてこちらでも検証してみますね。ほかに、エラーがでていたら、どこにどのようなエラーがでるのか、エラー文を原文のままつけておしえてください。
penguin520

2022/03/30 10:34

いまから言う手順でこのコードを入力しトリガーを設定してください 送信するグーグルフォームの編集画面を開く ⇛ 編集画面の右上にあるメニューボタン ・・・が縦にならんでるやつをクリック ⇛ スプリクトエディタを開く ⇛ const address = "受信したいメールアドレス";の部分だけを編集して以下のコードを入力する。 function sendsendMail(e){ var itemResponses = e.response.getItemResponses(); const subject = '【テスト】'; const address = "受信したいメールアドレス"; const namae = itemResponses[0].getResponse();  const haizoku = itemResponses[1].getResponse(); const koumoku = itemResponses[2].getResponse(); const body = namae + " " + haizoku + " " koumoku ; GmailApp.sendEmail(address, subject, body, { name: '窓口',bcc: '', attachments: []}); } 保存をクリック⇛ トリガーを設定する【導入 Head 関数 sendsendMail イベント フォームから送信時】⇛フォームから回答する ⇛ 受信したいメールアドレスのメールボックスか迷惑メールフォルダを確認する。 動いたら教えて下さい。こちらでは動きました。説明は、これで動くことを理解できてからです。
penguin520

2022/03/30 10:56

いかがでしょうか? 動作することが確認できたらば、説明をしてみたいと思うのですが。
sachi28

2022/05/05 06:23

ありがとうございます。動作確認できました。その後、なんとか解決できました。ご対応誠にありがとうございます。
penguin520

2022/05/10 12:06

よかったです。かなり頑張っておられるようなので、もし一緒に仕事をする機会がありましたら宜しくお願いします!
guest

0

ベストアンサー

いま、適当につくったトリガーの画面で説明します。
この画面と同じ画面の中のエラー率を教えて下さい。
赤い丸で囲った「失敗した実行」から、どんなエラーがでてるか教えて下さい。
イメージ説明

投稿2022/03/29 15:33

penguin520

総合スコア345

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

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

sachi28

2022/03/29 23:52

ありがとうございます。 エラーはステータス「失敗しました」「タイムアウト」 トリガーID wMBxhM6jR9mJSNWaNJMURQ となってしまいます。 function sendsendMail(e){ var itemResponses = e.response.getItemResponses(); const DOC_URL = 'https://docs.google.com/メール本文のフォーマットリンクです/edit'; const doc = DocumentApp.openByUrl(DOC_URL); const docText = doc.getBody().getText(); const subject = '【テスト】'; const address = "aa@gmail.com,bb@gmail.com"; const namae = itemResponses[0].getResponse();  const syozoku = itemResponses[1].getResponse(); const koumoku = itemResponses[2].getResponse(); const body = docText .replace('{名前}',namae) .replace('{所属}',syozoku) .replace('{項目}',koumoku) GmailApp.sendEmail(address, subject, body, { name: '窓口',bcc: '', attachments: []}); }
penguin520

2022/03/30 02:04

すいません、ここにコメントするつもりが、回答を別に建ててしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問