Googleフォームの自動返信メールがエラーで送信されなくなる
起こっている現象
Googleフォームのスプレッドシートから、「ツール>スクリプトエディタ」編集で、フォーム送信時に自動返信メールが届くように設定をしています。(スクリプト、トリガー設定は最下段参照)
しばらく問題なく正常に機能していたのですが、ある一人のフォーム送信をきっかけに以下の件名のエラーメールが管理者メールに届き、フォーム送信者のメールアドレスに自動返信メールが届かなくなってしまいました。一度このエラーが発生してしまうと、それ以降にフォームを送信した人も同じエラーが起こってしまいます。
件名:【失敗】Googleフォームにメールアドレスが指定されていません
本文:フォームの質問項目だけが書かれた、内容が空欄のフォーマット
このエラーが起こってしまった場合、現在は以下のように一時対処していますが、原因を特定して根本的に解決したいと思っています。
・回答スプレッドシートには、メールアドレスも含め回答内容がすべてきちんと記録されているので、手動で確認メールを作成して送信する(数が多いとかなりの手間になってしまいます)
・回答先のスプレッドシートを新しく指定し直す
(その度に共同編集者に通知しなくてはいけないのでできれば避けたいです)
原因について考えた事・調べたこと
・今まで正常に機能していたことから、スクリプトの記述に問題があるわけではないと思っています。
・エラーメッセジの内容が「メールアドレス指定されていない」ということですが、メールアドレスは必須項目にしてあるので、メールアドレスが空欄のまま送信されてしまったということは考えにくいです。
・スプレッドシートの最後列に、フォームにはない項目を足して、備考欄代わりに使っているので、これが何かエラーの原因になることは考えられるでしょうか・・・?
現在のプロジェクトトリガー設定
myFunction>スプレッドシートから>フォーム送信時
現在記述しているスクリプト
function myFunction() {
}
//------------------------------------------------------------
// 設定エリアここから
//------------------------------------------------------------
// 件名、本文、フッター
var subject = "ご予約ありがとうございます";
var body
= "この度は、ご予約ありがとうございます。\n\n"
+ "以下の内容にてお問い合わせいただきましたのでご確認ください。\n"
+ "---------------------------------------------------------------------------------\n";
var footer
= "---------------------------------------------------------------------------------\n\n"
// 入力カラム名の指定
var NAME_COL_NAME = '保護者名(漢字)';
var MAIL_COL_NAME = 'メールアドレス';
var TIMESTAMP_LABEL = 'タイムスタンプ';
// メール送信先
var admin = "xxx@xxxxx"; // 管理者(必須)
var cc = ""; // Cc:
var bcc = "xxx@xxxxx";// Bcc:
var reply = "xxx@xxxxx"; // Reply-To:
var to = ""; // To: (入力者のアドレスが自動で入ります)
//------------------------------------------------------------
// 設定エリアここまで
//------------------------------------------------------------
try{
// スプレッドシートの操作
var sh = SpreadsheetApp.getActiveSheet();
var rows = sh.getLastRow();
var cols = sh.getLastColumn();
var rg = sh.getDataRange();
Logger.log("rows="+rows+" cols="+cols);
// メール件名・本文作成と送信先メールアドレス取得
for (var j = 1; j <= cols; j++ ) {
var col_name = rg.getCell(1, j).getValue(); // カラム名
var col_value = rg.getCell(rows, j).getValue(); // 入力値
if ( col_name === NAME_COL_NAME ) { //メール本文の最初に名前を入れる
body = col_value+" 様\n\n"+body;
}
if ( col_name === MAIL_COL_NAME ) { //メールアドレス
to = col_value;
}
if ( col_name === TIMESTAMP_LABEL ) { //タイムスタンプ⇒申込日時
col_name = '申込日時';
}
body += "【"+col_name+"】\n";
body += col_value + "\n\n";
}
body += footer;
// 送信先オプション
var options = {};
if ( cc ) options.cc = cc;
if ( bcc ) options.bcc = bcc;
if ( reply ) options.replyTo = reply;
// メール送信
if ( to ) {
MailApp.sendEmail(to, subject, body, options);
}else{
MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body);
}
}catch(e){
MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
}
プログラム経験なしで、手探りでやっているので、読みづらい箇所や不足があるかと思います。近くに頼れるITパーソンもいないため・・・どうかご指摘・ご教授ください。
補足
概要:しばらく経ってから、エラーの概要がまとめて送られてきました。
エラーメッセージ
・スクリプト関数が見つかりません myFunction
・1 日にサービス email を実行した回数が多すぎます。(行 105、ファイル「コード」)