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

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

ただいまの
回答率

90.00%

Google Apps Scriptでの不具合 確認メール連続送信

解決済

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 1,053

gorudora

score 5

前提・実現したいこと

私は、ある団体の登録フォームと登録内容の確認メールをGoogleフォームとスプレッドシートとGASを
使って作っています。確認メールの完成が目標です。

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

フォームから送られてきた回答を自動メールで送信する際に、2回以上同じ確認メールが送信されることがあります。
時によってなのかわかりませんが、一回だけの時や、あとから+1通が送られてくるとき、
3回送られるときがあります。
なお、下のソースコード内の文面はプライバシー的に書き換えてます。メールも架空のアドレス(だと思います)です。
また、トリガーはスプレッドシートからフォーム送信時一個のみです。

該当のソースコード

function myFunction() {

  //設定

   //メール送信先
    var admin ="henshinyousuteaka@gmail.com";
    var admin2 ="fudannohonnaka@gmail.com";
    var Maneger ="daihyounomeado@gmail.com";
    var admin_name ="団体";
    var cc ="";
    var bcc = admin2+","+Maneger;
    var reply = Maneger;

   //件名
    var subject ="団体へようこそ!";

   //本文
    var body
      ="〈このメールは自動送信です〉\n\n"
      +"団体に入っていただきありがとうございます!!\n"
      +"申請を以下の通り受け付けました\n\n"
      +"-----------------------------\n";

   //フッター
    var footer
      ="-----------------------------\n"
      +"返信は不要です\n"
      +"聞きたいことがあったら何でもどうぞ\n"
      +"連絡先(代表)\n"
      +"〈"+Maneger+"〉";

   //入力col
     var NAME_col="お名前"
     var MAIL_col="メールアドレス"

   //-------------------------------------------------------

  try{

    //スプレッドシート指定
     var spreadsheet =SpreadsheetApp.getActive();
     var sheetA =spreadsheet.getSheets()[0];
     var rows =sheetA.getLastRow();
     var cols =sheetA.getLastColumn();
     var rg =sheetA.getDataRange();

    //セル内容をメール本文に追加
     for(var i=2;i<=7;i++)
     {var col_name =rg.getCell(1, i).getValue();
      var col_value =rg.getCell(rows,i).getValue();
      body +="〈"+col_name+"〉\n";
      body +=col_value+"\n\n";

      //セル利用

       //お名前
        if(col_name===NAME_col)
        {body =col_value+"様\n\n"+body;}

       //送信先
        var to=rg.getCell(rows, 8).getValue();

     }

    body += footer;

    //送信先オプション
    var options ={};
     if(cc)options.cc=cc;
     if(bcc)options.bcc=bcc;
     if(reply)options.replyTo=reply;
     if(admin_name)options.name=admin_name;

    //メール送信・エラー処理
    if(to){
      MailApp.sendEmail(to,subject,body,options);
    }else{
      MailApp.sendEmail(admin,"〈失敗〉Googleフォームにメールアドレスが指定されていません",body);
    }
  }catch(e){
    MailApp.sendEmail(admin,"〈失敗〉Googleフォームからメール送信中にエラーが発生",e.messsage);
  }
}

試したこと

何度も実行ボタンを押したのが原因かと思い、フォームおよびソースコードのコピー、また、トリガーの再指定を行いましたが、変わりませんでした。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

この辺で事象報告がありました(この後にも2件くらいあった気がする)が、Formに関連付いているスプレッドシートのスクリプトエディタにコードを書いて、「フォーム送信時」のトリガーをかけると、複数回送信が行われる現象が少し前から発生している模様

対応策として、フォームのスクリプトエディタにコードを書いて「フォーム送信時」のトリガーをかけると、1回になる模様(ただし、回答データの取り方が大幅にかわるので注意を要する)
https://teratail.com/questions/176187
https://teratail.com/questions/174338
https://teratail.com/questions/177064

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/16 22:11

    ありがとうございます!
    フォームから直接送る仕組みについての文献は少なかったですが、なんとか完成させることができました!

    キャンセル

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

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる