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

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

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@とかメールアドレスを作って設定するもよし、ですね。

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

「GoogleフォームでGoogle Apps Scriptを使って自動メール送信機能のついたお問合せフォームを作成してみた」への29件のフィードバック

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

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

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

    1. fromをGmailのアドレスにすれば、届くかもしれません。

      ちなみにわたしの作ったフォームでは、自分の携帯アドレスに自動メールが届きました。
      fromのアドレスは存在しないアドレスです。
      キャリアの設定かもしれませんね…。

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

    1. 1年以上も前にコメントを頂いていたのに気づかずに申し訳ありません。
      おそらく公開していないことが原因だと思われますが。。

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

    1. こちらも、、1年以上も前にコメントを頂いていたのに気づかずに申し訳ありません。
      Gmailでないと、なりすましメール等で迷惑メールに振り分けられたりします。
      Gmailで設定し、OCNへ転送することをおすすめします。

  9. 初めましてー。参考にさせていただいています!

    件名に「氏名様より、お問合せいただきました」

    といったような、入力いただいた項目を件名に反映させる場合はどうしたらよろしいでしょうか??
    どうぞご教示くださいませ!!

    1. れんこんぐ様

      コメントありがとうございます。
      下記で表示されないでしょうか?(未検証です)

      var title = username + '様より、お問合せいただきました'; 
      
      1. ちゃんなる様
        ありがとうございました!できました!!!

  10. たびたびすみません!教えてくださいっ

    送信されるメールのFROMをユーザー様が入力したメールアドレスにすることは可能ですか??
    どうやってもできなくて・・!

    1. れんこんぐ様

      お返事ができなくてすみません、FROMは変更できなかったと思います。
      そのため、返信する際にユーザーのアドレスに返信できるようにReply-toを指定しています。

      よろしくお願いいたします。

コメントを残す

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

CAPTCHA