misty's Blog

旅行が中心ですが、趣味など経験したものを書いています

Googleアンケートフォームからの意見が届いたら、自分のメールアドレスに送信してもらうようにしてみた

 Google のアンケートフォームを設置

以前、ブログにGoogleのアンケートフォームを設置したのですが、

www.mistysonata.work

※なんか、こういうのを置かないといけないらしいので・・・・

アンケートが届いたのを、メールで知らせてもらうようにしたい

ですが、このアンケート(問い合わせ)が、届いているかどうかは、Googleにログインしてアンケートフォームに行かないとわからないんですよね~(と思うんだけれど・・・・違うかな?)

それでは、困るので、ネットでいろいろ検索して、メールが届くように出来ないか調べてみました。

いろんな方が、紹介してくれているのですが・・・

参考にしたサイト

Googleフォームのメール通知を指定したアドレスに送る方法(Google Apps Script使用)

この方とか、

【GAS入門】フォームの回答があったらメール通知するスクリプトを作ってみよう | takakisan

エラーになっちゃうよ~

やってみたのですが、スクリプトがエラーになっちゃうんですよ。

一応、昔(40年前?)プログラマーだったけれど、このスクリプト?の文法とか関数とか全然わからないんで、なんでエラーなのか、全然わからない。コピペしただけなんだけれど~~。

で、もう一度、基本に戻ってやってみた。

まずは、簡単なスクリプトから

f:id:mistysonata:20200513194245g:plain

まずは、簡単なものを作ってみた。

MailApp.sendEmailの引数を、固定値にして、「メールアドレス(黒く塗りつぶしてあるもの)」と固定文字列「フォームからの意見が届きました」と「本文」という固定文字列をカンマで区切って設定した。

うまく行った!

教えてくれていたブログでは、MailApp.sendEmailではなくて、GmailApp.sendEmailを使っていたので、そのせい?????

他のサイトで、どっちを使ってもよい。って書いてあったので、GmailApp.sendEmailでエラーが起きたので、MailApp.sendEmailを使ってみました。

※全然、わかっていない。

定数を変数に変える

さて、これで上手くいったので、次は、固定値の文字列を変数にしました。

f:id:mistysonata:20200513194708g:plain

  • email
  • subject
  • body

の入れ物(変数)を作り、その中に、固定値(メールアドレスや、「フォームからの意見が届きました」やら「本文」やらの文言)を入れてから(右辺から左辺に入れている)、MailApp.senEmailの引数に、変数をセットしました。

よし!届くではないですか。

アンケートの内容もメールで教えてもらおう!

ま、これで、なんか誰かが送ってきた。ってのがわかるから、いいんですけれど、ちょっと欲が出てきて、アンケート(問い合わせ)の内容も一緒にメールで送ってくれるようにするには、どうするのかなぁ~~と。

 

こっちも、参考ブログを見てコピペしたのですが、エラーになっちゃって・・・

どうやら、参考ブログでは、ログで一度確認してから、レベルアップしているみたいなんですが、また別のサイトを見ると、ログだとエラーだけれど、実際に送ったらOKだった。みたいなのがあったので、ログを取る部分は、辞めて、直接レベルアップしたものを書きました。

 

f:id:mistysonata:20200513195109g:plain


追加したのは、一番上の行の、

FormApp.getActiveForm();

と、

8行目 var body = '内容';の後に、挿入するのが・・・・以下↓↓

 

bodyが、いろいろやっていたので、画像の上では「本文」で下の画像は「内容」となっていますが、これは、bodyという箱(変数)にシングルコーテーションで囲まれた文字を入れているだけであって、どんな文字でも構いません。

そして、

var body = '内容';

ここで、bodyという箱に、まず「内容」という文字を入れているのですが、次の行

body += '\n\n';

では、bodyの箱の中に、今あるものは、そのまま入れておいて、その後ろに右辺のものを継ぎ足している分です。(+=が、継ぎ足すという意味。だと思う)

そして、何を継ぎ足しているかというと、シングルコーテーションで囲まれたのは、\nが二つ。これ、多分「改行」だと思います。

メールの一行目に「内容」と表示させて、改行して、次の行。そして、もう一個改行して、一行空けて次の行から、何かを書き出そうとしています。

var itemResponses = e.response.getItemResponses();
itemResponses.forEach(function(itemResponse, index){
body += '【' + itemResponse.getItem().getTitle() + '】 \n'
body += itemResponse.getResponse() + '\n\n'
});

それが、この部分ですが、全然わかりません。ので、そのまま貼り付けました。なんとなく、クラスとかオブジェクトとか、この決められた命令語(?)で、Googleアンケートの内容を、うまく取得してくれているのでしょう。

そして、body += となっているので、どんどんアンケート内容を足し込んでおいて、

最後に書き出し。

MailApp.sendEmail(email,subject,body);

これは、元々あった命令です。

三つ目の引数 bodyという箱(変数)の中に、今回は、アンケートの中身をいっぱい入れておいて、メールで送信する。って事ですね~~。

なんとか成功した

いや、ここに行くまで、いろいろやったんですよ~。原因がわからなくて・・・・

f:id:mistysonata:20200513200850g:plain

こんな感じでメールが届きました。

めでたし、めでたし。