GoogleフォームでGoogle Apps Scriptを使って自動メール送信機能のついたお問合せフォームを作成してみた

sponsored link

さくっとお問合せフォームを作りたい時に。

Googleフォームが便利です。もともとはアンケートフォームなのですが、Google Apps Scriptを使うことによって自動メール送信も可能。

1ページのランディングページしかないサイトとか、ちょっと申し込みフォームが必要な時とか・・・使える!

早速手順いきます。

Googleフォームでフォームを作成

Googleフォーム
01

右下の「+」から、追加します。

02

直感的に項目を追加できます。

テーマも選べたりカスタマイズできます。

03

最近UIが新しくなってから、全部アイコンになったのでわかりにくいかも。

04

一応説明入れておきますね〜。

そうして出来上がったフォームがこちら!

お問合せフォーム

Google Apps Scriptを使って自動メール送信機能を追加

上記の手順までで、フォームとして完結できるのですが、いちいちGoogleフォームにアクセスして「回答」をチェックしなくちゃいけません。。

締切を決めているアンケートとかだったら、それで良いのですが、こちとらお問合せフォームを作りたいわけなので、気まぐれ返信ではいけませんよね!

そこで、フォームにお問合せが送信されたら、メールを自動で飛ばすようにしたいと思います〜。

05

右上の「その他」ボタンから、「スクリプトエディタ」を選択。

無題のプロジェクトが作成されます。

元々入力されている↓空の関数は削除して、こちらをコピペ!


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;
    }
    
    message += (i + 1).toString() + '. ' + question + ': ' + answer + '¥n'; 
  } 
  
  
  /* 管理者宛メール送信設定 */
  var address = 'kanrisha@example.com'; 
  var title = '[やってみたら、できた。へのお問合せを受信しました]'; 
  var content = '下記の内容で、お問合せを受信しました。¥n¥n' 
  + message
  + '¥n¥n'
  + '※このメールはGoogleフォームからの自動送信メールです。'; 
  var options = {from: 'kanrisha@example.com', bcc: 'bcc@example.com', name: 'やってみたら、できた。お問合せフォーム', replyTo: usermail};

  GmailApp.sendEmail(address, title, content, options);
  
  
  /* ユーザー宛メール送信設定 */
  var title2 = '[やってみたら、できた。へのお問合せを受付けました]'; 
  var content2 = username 
  + ' 様¥n¥n'
  + 'この度は、お問合せいただき、ありがとうございます。¥n'
  + '下記の内容で、受付けました。¥n'
  + '後ほど折り返しご連絡させていただきますので、いましばらくお待ちください。¥n¥n' 
  + message 
  + '¥n¥n'
  + '----------¥n'
  + 'やってみたら、できた。¥n'
  + 'https://narugaro.wordpress.com'
  + '¥n¥n※このメールはGoogleフォームからの自動送信メールです。'; 
  var options2 = {from: 'kanrisha@example.com', name: 'やってみたら、できた。お問合せフォーム'};

  GmailApp.sendEmail(usermail, title2, content2, options2); 
          
}


はい。

ご自分の環境に合わせて変更してくださいね。

管理者宛メール

管理者宛メールの送信先はaddress:kanrisha@example.com
titleに件名を。
bccで他のアドレスにも送りたい時:bcc@example.com
メールの送信元はfrom:kanrisha@example.com
name部分はメーラーで表示される送信元の名前。
管理者宛にきたメールに返信したらユーザーさんへのメールが立ち上がるようにreplyTo

ユーザー宛メール

title2に件名。
content2は本文。
署名もつけてます。
fromにメールの送信元アドレス
nameは送信元の名前。

続いてはメールを「いつ」送信するか(トリガー)を設定します。

11

スクリプトエディタのメニュー「リソース」から、「現在のプロジェクトのトリガー」をクリック。

12

フォーム送信時にして保存してください!

送信元をGoogleアカウントじゃないメールアドレスにする

これでOK、、ではないんですね〜。

上の設定部分で、送信元fromを設定していましたが、これがデフォルトじゃできないんです。

デフォルトでは、送信元はそのGoogleフォームを作成したGoogleアカウントのメールアドレスになります。

それでいいって人はそのままでもいいんですが、Gmailアドレスバレるの嫌だから変更したいよって場合!

これはGmailの方の設定になります。

06

Gmailを開いて、設定から「アカウントとインポート」タブへ。

「メールアドレスの追加」をクリックします。小さい黄色い画面が開きます。

07

追加したいメールアドレスを入力して、次へ!

08

送信サーバーと、パスワードを入力して次へ!(うまくいかない時はプロパイダのメール設定を見てね。)

09

メールで確認コードが送られてくるので、それを入力してください。

10

メールアドレスが増えました!

これで、先ほどのGoogle Apps Scriptが動くようになります!

no-reply@とかメールアドレスを作って設定するもよし、ですね。

今回作ったお問合せフォーム、自由に試してみてください。ユーザー宛のメールしか試せないけど。

フォームの使い心地も、見てみてくださいね。

一言テストです、と書いてもらったら、無視しときますw

もちろん、本物のお問合せも受付けます〜。

お問合せフォーム

2016年11月7日追記
apps-scripts-notifications@google.comから「その操作を実行するには承認が必要です。」というエラーが返ってきていて、使えなくなっていたのですが本日復旧しました。
formerror
原因は、たぶん色々なGoogleアカウントを使っていたからトリガーが曖昧になってしまった、ことでしょうか。
トリガーを作り変えて承認をし直したところ、なおりました。

sponsored link

20 thoughts to “GoogleフォームでGoogle Apps Scriptを使って自動メール送信機能のついたお問合せフォームを作成してみた”

      1. お返事ありがとうございます。

        pcアドレスでは受信できるようになりました‼︎
        でも、携帯アドレスでは受信出来ません。
        ちなみに携帯アドレスには特に受信制限はいれていません。

  1. 携帯アドレスで受信出来ない件ですが、
    fromで別アドレスで送信しているため、
    なりすましに引っかかるようです。
    携帯アドレスに送るのは、
    無理そうです(T_T)

  2. こんにちは。
    フォームの自動返信メールがなぜかエラーで
    返ってきます。

    英語のメールがGMAILに届きます。

    最初のうちはちゃんと来ていたのですが…
    原因わかりますか?

    1. コメントありがとうございます。返信が遅くなって申し訳ございません。
      わたしも、その現象に悩まされています。解明する時間がなく、放置していますが時間が取れ次第、調査します。

  3. これ、これ!
    まさに理想が現実に変わった瞬間でした!
    感激しました。ありがとうございます!
    そこで1点だけ、改修できないかご相談があります。
    現在、フォームに入力されたアンケート結果の内容が、指定したgmailに送信されているのですが、
    その回答内容が、メール本文にずっと横並びになった状態でメールが送られてくるのです。
    ちなみに私が作成したフォームは質問1から質問10まであるので、結構長いです。
    その為、理想を言うと、質問と質問の間は改行されたほうが、メールを受け取った側は見やすいかなと。。
    贅沢な悩みかもしれませんが、神にすがる思いです。。
    どうかご教示を宜しくお願いします!

    1. コメントありがとうございます。
      お役に立ててよかったです。

      すみません、コードが消えてしまっていたので、改行コードを書き直しました。
      ¥n
      という改行コードを入れれば、改行されます(^^)v

  4. こんにちは。
    同様のスクリプト(下記の通り、回答者への返信がないバージョン)で、担当者への自動返信フォームを作って運用していたのですが、11月初め頃からNarugaroさんと同じく「承認が必要」とのメッセージが届きました。トリガーを設定し直したところ、今度はスクリプトの実行中に「TypeError: undefined からプロパティ「response」を読み取れません。(行 2、ファイル「コード」)」というエラーが出てしまい「承認できない」とのエラーが「読み取れない」というエラーに変わっただけで、うまく動いていません。2行目の「var itemResponses = e.response.getItemResponses();」のところで引っかかっているようなのです。

    Narugaroさんの場合は、トリガー再設定で直ったようですね、その後も問題なく動いていますか。何か考えられる対策がありましたらご教授ください。Webからのコピペで書いているので、プログラムの知識は乏しいですが、何卒よろしくお願いします。

    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();
    message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n';
    }
    var address = '〇〇@gmail.com';
    var title = '[お問い合わせ フォームより]';
    var content = '下記の内容で、お問い合わせを受信しました。\n\n' + message;
    GmailApp.sendEmail(address, title, content);
    }

    1. コメントありがとうございます。

      わたしも、「承認が必要」のエラーのあと、「読み取れません」のエラーに変わりました!
      よくわからないのですが(すみません)、トリガーを消して、新しく作り変えて、スクリプトの「実行」をしてから(ここでエラーが出るけど気にしない)、送信してみたところ、動くようになりました。

      1. お返事ありがとうございます「エラー出ても無視」で動きました!ありがとうございます!

      2. NARUGAROさん

        TypeError: undefined からプロパティ「response」を読み取れません。(行 2、ファイル「コード」)
        というエラーが出て本当に困っていて、こちらのページにたどり着きました。

        トリガーもあっているのに、と思っていましたが
        一度削除して、エラーが出ても無視してテストしたところ、解決しました。
        本当にありがとうございました。

  5. こんにちは!
    narugaroさんのおかげで、困っていたGoogleフォームの自動返信メールの問題が解決できました!
    プログラミングの知識が乏しいまま探していたので、、本当に助かりました。
    有難うございました。

    1つ、質問させてください。
    自動返信メールに記載されている内容項目に、1. 2. 3.と番号がついてありますが、
    こちらは
    message += (i + 1).toString() + ‘. ‘ + question + ‘: ‘ + answer + ‘\n’;
    の部分をいじると消すこと(あるいは丸印にする)ことは可能でしょうか。

    参考にさせていただいているばかりで申し訳ございませんが、、、ご教授お願いできますでしょうか。

    どうぞ宜しくお願い致します。

    1. こんにちは!コメントありがとうございます。
      その部分で合っています(^^)
      (i + 1).toString() +
      を消して、
      ‘. ‘

      ‘● ‘
      などに変えればOKです。

  6. 先日はありがとうございました!
    その後、快適且つ正確な業務が出来ていて大変満足しています。
    NARUGAROさんのおかげです。

    そこで勝手ながら、もう1つ質問させて下さい。
    回答者、管理者、特定の誰か、この3人に回答内容を自動で送信したいのです。。

    この特定の誰かとは、フォームの質問1の回答に入力されたアドレスになります。
    質問1のタイトルを「この回答を報告する人」とします。
    これは毎回異なりますが、選択肢としては10人程度なので、
    記述式あるいはプルダウンやラジオボタンを想定しています。

    最悪、回答者へのリターンは無くてもOKなのですが。。
    管理者と、質問1に入力するアドレスへの送信が必須です。

    どうでしょうか?
    正直、自分でも「何、言ってんだろう」と思うほど複雑です。。
    本当に自分勝手ですが、お付き合い頂けると嬉しいです。
    宜しくお願い致します。

    1. お返事が遅くなって、すみません。
      簡易的に、やってみました。
      上部に、以下の記述を追加します。
      var report = itemResponses[0].getResponse();
      itemResponsesの[0]数字は、質問の1番最初を指します。
      そして下部に報告メール用の送信設定を作成し、sendEmailの部分で先ほど取得した「report」を使います。
      GmailApp.sendEmail(report, title3, content3, options3);

      function submitForm(e){ 
        var itemResponses = e.response.getItemResponses(); 
        var message = '';
        var report = itemResponses[0].getResponse();
        
        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;
          }
          
          message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n'; 
        } 
        
        
        /* 管理者宛メール送信設定 */
        var address = '●●@gmail.com'; 
        var title = '[回答を受信しました]'; 
        var content = '下記の内容で、回答を受信しました。\n\n' 
        + message
        + '\n\n'
        + '※このメールはGoogleフォームからの自動送信メールです。'; 
        var options = {from: address, name: 'アンケート'};
      
        GmailApp.sendEmail(address, title, content, options);
        
        
        /* ユーザー宛メール送信設定 */
        var title2 = '[回答を受付けました]'; 
        var content2 = username 
        + ' 様\n\n'
        + 'この度は、回答いただき、ありがとうございます。\n'
        + '下記の内容で、受付けました。\n'
        + message 
        + '\n\n'
        + '\n\n※このメールはGoogleフォームからの自動送信メールです。'; 
      
        GmailApp.sendEmail(usermail, title2, content2, options); 
        
        
        /* 報告メール送信設定 */
        var title3 = '[回答の報告です]'; 
        var content3 = '以下の回答を報告します。\n\n' 
        + message 
        + '\n\n'
        + '\n\n※このメールはGoogleフォームからの自動送信メールです。'; 
      
        GmailApp.sendEmail(report, title3, content3, options); 
                
      }
      
      1. NARUGAROさん、全然遅くないです!
        感謝の言葉しか出てこないです。
        「本当にありがとうございます!」
        一度、やってみます。
        感動のあまりに手が震えますね 笑

  7. 始めまして、グーグルファーム自動返信を作りましたが、テストをしても返信が来ません。
    試しにスクリプトエディタのバーにあるデバックをクリックすると返信が来ましたが
    その後もデバッグしない限り返信が来ません。どこに問題があるのか教えていただけますか?
    トリガーにはシートからフォーム送信時としてあります。
    まだ公開していませんのでプレヴューテスト段階です。よろしくお願いいたします。

  8. お問い合わせが来たら自分のメールアドレスにくる仕掛けは自分のメールアドレスがOCNでもできるのでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA