googleフォーム送信後にメール送信機能を実装する【Google Apps Script】

前回は、GoogleフォームとHTMLフォームの紐付けを行い、非同期送信を行うところまでいきました。

あわせて読みたい
Googleフォームを静的サイトに埋め込みカスタマイズ【非同期通信Ajax】みなさん静的サイトにフォームの埋め込みを行う際、これまで難儀しなかったでしょうか? 私は最初はフォームの実装方法がわからず、フォー...

ただ、このままだとGoogleフォームに送信がおこなわれても、

  • 通知がないので、運営者が気づかない
  • 自動返信メールがないと、送信側も本当に送信できているか不安

といった面で、まだ実用性に欠けます。

そこで、今回は「Google Apps Script」でその機能を実装していこうと思います。

自作フォームでなく、Googleフォーム単体で使われる場合でも、今回の方法をお使いいただけます。

前提条件:Googleフォームはすでに作成済み

Google Apps Scriptの記入

今回は前回作ったフォームを例にします。


ここの質問タイトルや質問形式でこの後のコードが若干変わりますので、ご注意ください。

まずは、フォーム管理画面の右上の点線3つから、スクリプトエディタを選択します。


そしたら、最初から書き込まれているコード(myfunction)は削除して、以下のコードに書き換えます。

function submitForm(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(); 
     
    if (question == 'お名前'){
      var username = answer;
    }
    if (question == 'メールアドレス'){
      var usermail = answer;
    }
    if (question == 'お好きなプログラミング言語'){
      var lang = answer;
    }
    if (question == '自由記述'){
      var freetxt = answer;
    }
     
    message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n'; 
  } 
   
   
  /* 管理者宛メール送信設定 */
  var address = 'samuraibrass1414@gmail.com'; 
  var title = '[shogo web creatingへのお問合せを受信しました]'; 
  var content = '下記の内容で、お問合せを受信しました。\n\n'
  + message
  + '\n\n'
  + '※このメールはGoogleフォームからの自動送信メールです。'; 
  var options = {from: 'samuraibrass1414@gmail.com', name: '石井正悟', replyTo: usermail};
 
  GmailApp.sendEmail(address, title, content, options);
   
   
  /* ユーザー宛メール送信設定 */
  var title2 = '[shogo web creatingへのお問合せを受付けました]'; 
  var content2 = username 
  + ' 様\n\n'
  + 'この度は、お問合せいただき、ありがとうございます。\n'
  + '下記の内容で、受付けました。\n'
  + '後ほど折り返しご連絡させていただきますので、いましばらくお待ちください。\n\n'
  + message 
  + '\n\n'
  + '----------\n'
  + 'shogo web creating\n'
  + 'https://shogo141.work'
  + '\n\n※このメールはGoogleフォームからの自動送信メールです。'; 
  var options2 = {from: 'samuraibrass1414@gmail.com', name: 'shogo web creatingお問合せフォーム'};
 
  GmailApp.sendEmail(usermail, title2, content2, options2); 
           
}

このままのコードでメール送信機能の部分はできているので、あとはご自身のフォームに合わせてコードや文言を変えて行けばいいです。

上から順に解説します。

if (question == 'お名前'){
      var username = answer;
    }
    if (question == 'メールアドレス'){
      var usermail = answer;
    }
    if (question == 'お好きなプログラミング言語'){
      var lang = answer;
    }
    if (question == '自由記述'){
      var freetxt = answer;
    }

ここのquestion==”の部分は、Googleフォームの質問タイトルと同じ文言にしてください。

varの変数名は適当で大丈夫ですが、メール本文に受け取った値を使いたい場合は、この変数名を使うことになるのでご注意ください。

管理者宛の設定

/* 管理者宛メール送信設定 */
  var address = 'samuraibrass1414@gmail.com'; 
  var title = '[shogo web creatingへのお問合せを受信しました]'; 
  var content = '下記の内容で、お問合せを受信しました。\n\n'
  + message
  + '\n\n'
  + '※このメールはGoogleフォームからの自動送信メールです。'; 
  var options = {from: 'samuraibrass1414@gmail.com', name: '石井正悟', replyTo: usermail};

管理者宛メールの送信先は

  • address:ここに管理者宛のメールアドレス(受託制作の場合、先方のアドレス)
  • title:件名
  • bcc:他のアドレスにも送りたい時(今回未設定)
  • メールの送信元はfrom:おそらくaddressと一緒でok
  • name:メーラーで表示される送信元の名前
  • replyTo:管理者宛にきたメールに返信したらユーザーさんへのメールが立ち上がる

送信者向けの設定(お問い合わせ者)

/* ユーザー宛メール送信設定 */
  var title2 = '[shogo web creatingへのお問合せを受付けました]'; 
  var content2 = username 
  + ' 様\n\n'
  + 'この度は、お問合せいただき、ありがとうございます。\n'
  + '下記の内容で、受付けました。\n'
  + '後ほど折り返しご連絡させていただきますので、いましばらくお待ちください。\n\n'
  + message 
  + '\n\n'
  + '----------\n'
  + 'shogo web creating\n'
  + 'https://shogo141.work'
  + '\n\n※このメールはGoogleフォームからの自動送信メールです。'; 
  var options2 = {from: 'samuraibrass1414@gmail.com', name: 'shogo web creatingお問合せフォーム'};
  • title2:件名
  • content2:本文
  • from:メールの送信元アドレス
  • name:送信元の名前

一応中身を解説すると、+で内容を付け足していって、ただそのまま文章を送ると改行されていない状態のメール文になってしまうので、

\nで改行を入れています。

スクリプトを保存し、トリガー設定

まずは記入し終わったコードを保存します。


その後、以下の場所をクリック。


その後、画面が遷移するので、右下のボタンをクリックします。


その後、以下のように設定し、フォーム送信時に記入したスクリプトが動作するようにします。

googleフォーム送信テストを行う

以下の内容でお問い合わせをして見ます。


すると、

管理者あてのメール

送信者への自動返信メール


おぉ〜きてますきてます。

これでいいかな?

Googleフォームを案件で使う際のデメリット

アカウントをどうするか

自分のサービス、ページのフォームならこれでもいいですが、受託案件でフォームを作る場合、少しめんどくさそうです。

  • Googleフォームは基本的に先方に作ってもらう
  • Google Apps Scriptを記入するために、相手のGoogleアカウント情報をもらってログインする必要がありそう(非エンジニア相手に自分でやってもらうのは難易度的に難しい)

2020/03/18 追記 共同編集者として招待してもらえば良さげ

Googleアカウント情報をもらわなくても、相手にGoogleフォームへの「招待」をしてもらえれば解決しそうです!