Googleフォームから投稿があった場合にスプレッドシートの「送信先アドレス一覧シート」に記載されているアドレスに通知がされるようにしています。
スプレッドシートから「ツール>スクリプトエディタ」で下記のスクリプトを作成しました。
function sendform(e){ var s = SpreadsheetApp.getActiveSpreadsheet(); var addrSheet = s.getSheetByName("送信先アドレス一覧"); var lastRow = addrSheet.getLastRow() var range = addrSheet.getRange(3, 2, lastRow - 1).getValues() var count = range.length; var addr = ''; for(var i = 0; i < count; i++){ addr = addr + range[i] + ',' } addr = addr.slice(0, -2); var subject = "[投稿がありました]"; var items = ['名前', '住所', '備考']; var body = ['以下の内容で投稿がありました。 \n\n']; for (var i = 0, len = items.length, name; i < len; i++) { name = items[i]; body += '【' + name + '】 \n' + e.namedValues[name] + '\n\n'; } MailApp.sendEmail(addr, subject, body); }
トリガーは以下の通りです。
実行する関数:sendform
デプロイ時に実行:Head
イベントのソース:スプレッドシートから
イベントの種類:フォーム送信時
エラー通知設定:毎日通知を受け取る
フォームから送信した時に、複数回のメールが送信されます。
そのうち1件はフォームの入力内容が反映されているのですが、その他のメールは入力内容が空です。
送信される件数は2件の場合もあれば、5件の場合もあります。
メールが1回のみ送信されるようにしたいのですが、複数回メールが送信される原因がわかりません。
よろしくお願いいたします。
類似の質問を何度か目にしましたが、機能として多重化するバグはこれまでありませんでした。トリガが複数登録されていないか、共有している他のユーザがトリガを登録していないか、同じ名前の関数が複数存在しないか、送信先アドレスに同じものが入っていないか、などの設定・データをご確認いただけますか?
送信先アドレス一覧を確認しましたが、重複はありません。
現状、共有しているユーザーはいないので、他のユーザーがトリガを登録していることはないと思います。
「マイトリガー」のぺージでは下記のトリガーのみ登録されています。
プロジェクト:sendform
前回の実行 :2019/02/14 11:14:22
イベント :スプレッドシートから-フォーム送信時
関数 :sendform
コードを書く途中で、ファイルバックアップのためコピーしたりしていませんか?
コードがこれしかないとして、2通目以降の不正メールにおける「その他のメールは入力内容が空です」というのは、"【"や"】"や見出し項目や、投稿がありましたという件名などは入っているものの、回答が空、という状態で間違いないですね?全くの白紙ではない、と。
バックアップはとっていません。
"【"や"】"や見出し項目や、投稿がありましたという件名などは入っています。
回答のみ空の状態です、全くの白紙ではありません。
回答シートに、タイムスタンプ以外空白の行があるということでしょうか?
例えば2回メールが送信された場合、1件目は回答ありのメール、2件目が回答なしのメールになりますが、回答シートには、1件目の内容のみ反映されます。
なので、回答シートには空白の行はありません。
聞けば聞くほど「コード~コピー.gs」があるとしか思えない動作です。解決策は思いつかないので、回避策を回答いたしました。
