GoogleFormの送信でスプレッドシートに登録してある該当者に自動転送してくれるメーリングリストを作った話

##作ったもの
Googleフォームでメールの送信フォームを作り、Spreadsheetに登録されているアドレスにフォーム送信後自動転送するものを作りました。
<img width="200" alt="スクリーンショット 2019-06-24 20.59.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/446212/d23dad11-d19d-4b62-ed67-d54e19f15065.png">

##背景
大学のサークル内でメーリス担当になっていましたが、１年間メールを回せる自身がなかったので、自動化したいと思った
（後から、freemlっていうサービスあるの知ったんですけど、気付かず作りました。今はサービスが終了してしまったみたいなんで、これ使ってください。)

##今まで
これまでは、代表者にサークル内で送りたいメールを送信し、その後、代表者が該当者のアドレスに転送する→そもそも面倒い。件名とか送信者の名前・メールアドレスとか必須項目がなかったりした。送信範囲を指定したりすることもあったので、それが抜けてることもあった。

##使ったもの
・GoogleAppsScript(GAS)
・GoogleForm
・SpreadSheet

##概要
1.Googleフォームに必須項目を設けて、件名や送信者の名前・アドレスなどの必須項目を漏れなく記入してもらう。
2.スプレッドシートを参照し、該当者のメールアドレスにフォームから受けたデータをメール形式に構築し、送信する。

##必要な基礎知識
GASとSpreadsheet、Gmailの連携方法は山のようにあると思うので参考を下に載せておくので、知識に自信のない方はまずこちらから！
https://www.kabegiwablog.com/entry/2017/08/23/141037

##フォームの作成
必要だと思う項目を作りました。必須事項は上の画像からだと、「宛先・名前・件名・本文」。あとは任意に入力してもらう感じです。
このフォームにスクリプトをくっつけました。


##ソースコード
###■まずは、SpreadSheetを作成します。
フォームの回答のタブから、スプレッドシートの作成を選択し、スプレッドシートを作成します。
シートの1枚目はのフォーム回答が入力されるので、2枚目にアドレスを登録するリストを作ります。
こんな感じ。
![スクリーンショット 2019-06-24 22.18.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/446212/fd8c439d-8b92-3883-5f25-0ff0451e6a89.png)

合唱部だったので、パートが書いてありますw
E列については後述します。




###■次に、フォームの内容を取得して、代表者のアドレスまで通知のメッセージを送るところまで。
![スクリーンショット 2019-06-24 21.34.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/446212/6979c221-7f26-755e-52d8-6e004ddd95a3.png)
GASは上のスクリプトエディタのところから作成します。

```javascript:sendmail.gs


function submitForm(e){
  var itemResponses = e.response.getItemResponses();
  var message = '';
  var username = '';
  var mail = '';
  var AnswerTitle = '';
  var maintext = '';
  var destination = '';
  for (var i = 0; i < itemResponses.length; i++) {
	var itemResponse = itemResponses[i];
	var question = itemResponse.getItem().getTitle();
	var answer = itemResponse.getResponse();
    
    if (question == '質問の文書を入力(宛先はどちらですか)'){
    destination = answer; 
    }
	if (question == '質問の文章を入力(あなたの連絡先)'){
  	mail = answer;
	}
	if (question == '質問の文章を入力(件名)') {
  	AnswerTitle = answer ;
	}
	if (question == '質問の文章を入力(本文（署名は入れないでください）)'){
  	maintext = answer ;
	}
	if (question == '質問の文章を入力（あなたの役職・名前）') {
   	username = answer ;
	} 
	message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n'; //管理者にフォームが送信された通知とその内容を送るべく項目を並び替え
  }
  
  var managerAddress = ['代表者のアドレスを入力','代表者のアドレスを入力２'];
  var title = 'メーリスの依頼が来ました' ;
  var content = '以下の内容でフォームが送信されました。\n\n' + message;
  
  GmailApp.sendEmail(managerAddress, title, content);　//代表者のアドレスにメールの概要を送信

```
これで、フォームの内容が管理者の元にメールで届きます。こんな感じ。
<img width="200" alt="IMG_6856.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/446212/ff0a9b50-8478-0c55-f517-e70db3e331c4.jpeg">

Googleフォームは回答がきたらメールで通知することはできるのですが、一瞬で内容がわかるようにするためにはこんな感じの工夫が必要です。

###■そして、該当者にフォームの内容を送信する

```javascript:thumbsdown:

  var ss_id = 'スプレッドシートidを入力';
  var sh_name = 'シート名を入力';
  var sh = SpreadsheetApp.openById(ss_id).getSheetByName(sh_name);
  var rowSheet=sh.getDataRange().getLastRow(); 
  
  for(var j=2; j<=rowSheet; j++){
 
    var situation=sh.getRange(j,1).getValue();
    
    if( destination.indexOf(situation) === -1){ //フォームの[宛先はどちらですか]の回答の文字列がシートのA列に含まれない行は飛ばす処理。
      continue;
    } 
    
    var strEmail=sh.getRange(j,4).getValue();
    
    var title2 = AnswerTitle ;
    var content2 = maintext + '\n\n\n' + username + '\n' + mail + '\n'; //メール文の並び替え
    GmailApp.sendEmail(strEmail, title2, content2);
  } 
}
```

これでOKです。
トリガーについては、以下のリンクを参照して実装してください！
https://takakisan.com/gas-form-send-email-tutorial/

シートのE列ですが、もしフォームの宛先が「その他」だった場合に手動で送ることになるので、簡略化するための工夫でした。（ここでは詳しく書きません。ご質問あればコメントで!)
##■問題発生:thumbsdown::thumbsdown:
ただ、悲しいことに問題が発生してしましました。僕の調査不足だったのですが、
###`GmailApp`の自動送信はgoogleのフリープランだと24時間で100通までしか送れなかった！！

がっくり……
詳しくはここに書かれています。　https://support.google.com/a/answer/166852

対処法は、フリープランからGsuiteにアップグレードせよ！というもの。

完成してうずうずしてたので少しでも早くローンチしたいという気持ちがあったので、実費でGsuiteBasicに申し込みアップグレードしました。

年間費用は6000円で、僕はドメインも購入したので+1000円で7000円かかりました。

（Gsuiteはお節介にも無料試用期間があって、試用期間だと100通制限のままなので、試用期間をパスしなければならず、それにも手こずった記憶があります。）

##■おわりに
これだけです。
僕は全くの初心者でしたが、ググりまくってなんとか作りました。
初心者の方のお気持ちがまだわかるので、わからないことあればぜひコメントください。あと、コードが汚いのは独学のせいだと思います。
GASは簡単なんで初心者でもイメージあれば作れて楽しい！っていうのを学びました。