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

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

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

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

解決済

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

sachi28
sachi28

総合スコア2

Google Apps Script

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

2回答

0評価

0クリップ

299閲覧

投稿2022/03/21 12:28

編集2022/05/10 21:06

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: []});

}

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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は消してください。危ないと思います。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google Apps Script

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