17.5 C
Tokyo
ホーム ブログ

Googleフォームの自動メール送信ができなくなったので修正しました。

0

Google Formを利用すると簡単にお問合せやアンケートが作れるので便利ですね。しかもその内容はスプレッドシートに自動に保存されるので別途整理する必要がなくありがたいです。

スクリプトを組めば、自動返信メールも送れますので愛用しているものですが、急にメールが送信できなくなったのでよくある権限の問題か?と思いましたがそうでもなかったので原因を調べました。

下にあるスクリプトは今まで使ったスクリプトです。私もネットで情報を探して適当にコピペして使ったものですが、動かなくなったのでいろいろ探しましたがほとんど下記のスクリプトが書かれたいたので新しく作ることにしました。

// 今まで使っていたスクリプト、いままでありがとう
function sendEmail(e) {
  var itemResponses = e.response.getItemResponses();
  var message = '';
  for (var i = 0; i < itemResponses.length; i++) {
    var itemResponse = itemResponses[i];
    var question = itemResponse.getItem().getTitle();
    var answer = itemResponse.getResponse();
    message += question + ': \n' + answer + '\n\n';
  }
  
  var address = itemResponses[0].getResponse();
  var title = 'お問合せありがとうございます。';
  var content = itemResponses[1].getResponse() + 'さんへ\n\n';
  content += '━━━━━━━━━━━━━━━━━━━━━━━\n\n';
  content += message;
  content += '━━━━━━━━━━━━━━━━━━━━━━━\n\n';

  GmailApp.sendEmail(address, title, content);
}

まず、テストのために簡単なお問合せフォームを作成しました。
メールアドレスがないと返信できないので必須にします。

じゃ、スクリプトを作成しましょう。以前のスクリプトはsendEmail(e)を使ってフォームのデータを読みこみましたがこれからフォームをgetActiveFormなどを使ってデータを読みこむ必要があるようです。

//新しく作ったスクリプト、これからよろしく
function sendEmail() {
  // 対象のフォームをしてする
  var form = FormApp.getActiveForm();
  // フォームの更新、データを読み込む
  var formResponses = form.getResponses();
  // 本文内容
  var message = '';
 // シートからデータの最大値を持ってきます。
  var dataMaxLength = formResponses.length-1;
  // 最後の行(最新データ)のみ読み込む。
  var formResponse = formResponses[dataMaxLength];
 // フォームのデータから各項目(質問と回答)のデータを読み込む
  var itemResponses = formResponse.getItemResponses();
 
  for (var i = 0; i < itemResponses.length; i++) {
      var itemResponse = itemResponses[i];
      var question = itemResponse.getItem().getTitle();
      var answer = itemResponse.getResponse();
      message += question + ': \n' + answer + '\n\n';
  }
  
  // 直接メールアドレスを読みこむ
  var address = itemResponses[1].getResponse();
  var title = 'お問合せありがとうございます。';
  var content = itemResponses[0].getResponse() + '様\n\n';
  content += '━━━━━━━━━━━━━━━━━━━━━━━\n\n';
  content += message;
  content += '━━━━━━━━━━━━━━━━━━━━━━━\n\n';

  // メール送信
  MailApp.sendEmail(address, title,content);
}

後はほとんど同じですが、フォームのデータがどうやらスプレッドシートを基にデータを読みこむようでform.getResponsesをすると全てのデータを読みこんでしまうので最後のデータを読みこむように指定しました。もっとスマートな方法がありそうだが一旦問題解決をしてから調整だと思いますのでパス!
メールの送信に以前はGmailAppを使っていましたが、MailAppに変更しました。これは結構前から変わった仕様だった気がしますが使えたので変更してなかったんですが、せっかくなので修正しました。

アーカイブとして作成しましたが、私と同じくメールの送信ができなくて困った方に役に立つと嬉しいです。
Google Formは一般の方もよく使うのでなるべくコピペで使えるように書いてみました。
書いてるうちにもっと細かいものも書きたいと思いましたが時間切れなので、後ほど機会があればまた掲載したいと思います。