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回のみ送信されるようにしたいのですが、複数回メールが送信される原因がわかりません。
よろしくお願いいたします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
まずは問題切り分けのため、sendform(e)自体が複数回動いているか確認したほうがよろしいかと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
あたらしく作ったフォームで試しましたが、そのような事象は再現しません。
フォームを作り直す
→コードは正常動作していますので、設定などに影響を受けている可能性が高く、googleドライブの設定を確認できない観点での回答としては、作り直しが確実かと思います必須項目を入れる
→GoogleFormはダブルクリックなどで再送できないようになっていたと思いますが、空白で送られているとしか考えられません。e.namedValuesは送信時のパラメータでなければ動作せず、またエラーがあればメールも送信されませんので、正常に動作しているとしか思えない状況。であれば、必須をかけることで、空白送信が抑止されて、人間が意図して送信した場合の動作が保たれるのではないでしょうか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.97%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
papinianus
2019/02/14 11:51 編集
類似の質問を何度か目にしましたが、機能として多重化するバグはこれまでありませんでした。トリガが複数登録されていないか、共有している他のユーザがトリガを登録していないか、同じ名前の関数が複数存在しないか、送信先アドレスに同じものが入っていないか、などの設定・データをご確認いただけますか?
kh101
2019/02/14 12:00
送信先アドレス一覧を確認しましたが、重複はありません。
現状、共有しているユーザーはいないので、他のユーザーがトリガを登録していることはないと思います。
「マイトリガー」のぺージでは下記のトリガーのみ登録されています。
プロジェクト:sendform
前回の実行 :2019/02/14 11:14:22
イベント :スプレッドシートから-フォーム送信時
関数 :sendform
papinianus
2019/02/14 12:06
コードを書く途中で、ファイルバックアップのためコピーしたりしていませんか?
コードがこれしかないとして、2通目以降の不正メールにおける「その他のメールは入力内容が空です」というのは、"【"や"】"や見出し項目や、投稿がありましたという件名などは入っているものの、回答が空、という状態で間違いないですね?全くの白紙ではない、と。
kh101
2019/02/14 13:01
バックアップはとっていません。
"【"や"】"や見出し項目や、投稿がありましたという件名などは入っています。
回答のみ空の状態です、全くの白紙ではありません。
papinianus
2019/02/14 13:07
回答シートに、タイムスタンプ以外空白の行があるということでしょうか?
kh101
2019/02/14 13:17
例えば2回メールが送信された場合、1件目は回答ありのメール、2件目が回答なしのメールになりますが、回答シートには、1件目の内容のみ反映されます。
なので、回答シートには空白の行はありません。
papinianus
2019/02/14 15:32
聞けば聞くほど「コード~コピー.gs」があるとしか思えない動作です。解決策は思いつかないので、回避策を回答いたしました。