LoginSignup
pickupline
@pickupline

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Googleフォームの回答内容に応じて、メールを送信したい

解決したいこと

GASを使って、Googleフォームのコンテナバインドスクリプトを書いています。
社内の業務の依頼引受フォームを作っています。
添付の図のように、一つ目の質問が依頼を引き受ける人の名前、
二つ目が依頼を引き受ける人のメールアドレス、
三つ目以降は依頼内容としています。

「フォームの送信」をトリガーとして、
依頼を引き受ける人が、「依頼を受ける」を選択した場合のみ、その依頼について、
スプレッドシートの「依頼」という名前のシートの、
E列に入力されているGoogleドライブの共有URLを、
二つ目のメールアドレスに対して、メールの本文として送りたいと考えています。
なお、スプレッドシートは添付ファイルのように入力されています。
(つまり、フォームの依頼の表示順と、同じ順番で上から入力されている)

発生している問題・エラー

メールを正常に送ることができません。
ご助言いただければ幸いです。
よろしくお願いいたします。

image.png

image.png

該当するソースコード

function sendEmail(e){

  FormApp.getActiveForm();
  var itemResponses = e.response.getItemResponses();
  var result = [];
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    result.push([question, answer]);
  }

  var url = "https://docs.google.com/〇〇〇〇〇〇";
  var spreadSheet = SpreadsheetApp.openByUrl(url);
  var sheet = spreadSheet.getSheetByName("依頼")
  var values = sheet.getDataRange().getValues();

  for(var j = 0 ; j < result.length ; j++){
    if(result[j][1] === "依頼を受ける"){
      var file = values[j][4];
      ;
    }  

    var resipient = result[1][1];
    var subject = "関連資料をメールでお送りします";
    var body = file;

    GmailApp.sendEmail(resipient,subject,body);
  }  
}


### 自分で試したこと
ひとまず、var resipient = "実在するメールアドレス" としてみたところ、
メールは送られてきます。(ただし、本文中にGoogleドライブの共有URLは送られてきません)
0

1Answer

こんにちは。

質問の件、よくあるところで行くと、
「権限の設定」「トリガーの設定」あたりかなーと思います。
一度その辺りを見直してみてはいかがでしょう。

また、GASにもデバッグツールありますが、
途中の変数の状態をファイルで書き出す
昔ながらの↓こういうのもわかりやすくてオススメです。

  const folder_id = 'フォームの置いてあるgoogle DriveのフォルダーID';
  const folder = DriveApp.getFolderById(folder_id);
  const blob = Utilities.newBlob('', 'text/json' , 'test_' + new Date().getTime() ).setDataFromString( JSON.stringify(result) , 'utf-8');
  folder.createFile(blob);

用途)resultへの値設置直後に置いて、期待する値が入っているか確認など。

0

Your answer might help someone💌