GoogleSpreadsheetを使ってメーリングシステムを構築する

# できること
・大勢の相手にGmailでメールを個別送信することができる。（いわゆる一斉送信にはならない。）
・メール文面を相手によって変えることができる。（相手の名前を文面中に組み込むなど。）

# 1.Spreadsheetの準備
GoogleSpreadsheetで新しいシートを作成。写真のように送信する相手のアドレスや名前など、送信するメールで個別に変化させたいデータを表形式で入力していく。<img width="1280" alt="スクリーンショット 2018-12-31 12.29.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/318907/a3a58e43-cdd1-2041-39aa-3b10354e9106.png">
左上の「ツール」バーから「スクリプトエディタ」を選択し、別画面でGoogle Apps Scriptを開く。

# 2.Documentの準備
GoogleDocumentで送りたいメールの本文を作成します。
そのとき、{イベント名}など、送信するメールで個別に変化させたいデータを変数形式で指定していきます。<img width="1224" alt="スクリーンショット 2018-12-31 13.05.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/318907/61c708fb-3ca6-89a3-bdfe-b86342a27aae.png">


# 3.Google Apps Scriptの編集
開いたGoogle Apps Scriptに下記のコードをコピペする。

<pre><code>
function sendMail(){
 
  /* スプレッドシートのシートを取得と準備 */
  var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
  var rowSheet=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得
  
  /* ドキュメント「メール本文テスト」を取得する */
  var docTest=DocumentApp.openById("ID"); //ドキュメントをIDで取得
  var strDoc=docTest.getBody().getText(); //ドキュメントの内容を取得
  
  /* メール表題、fromアドレス、差出人名を準備 */
  var strSubject="hogehoge株式会社のイベントにご参加の皆様へ"; //表題
  var strFrom="hogehoge@gmail.com"; //From
  var strSender="hogehoge株式会社"; //差出人
  
  /* シートの全ての行について社名、姓名を差し込みログに表示*/
  for(var i=2;i<=rowSheet;i++){
    
    var strEvent=mySheet.getRange(i,1).getValue(); //イベント名
    var strName=mySheet.getRange(i,2).getValue();　//名前
    var strTo=mySheet.getRange(i,3).getValue();　//相手のアドレス
    
    var strBody=strDoc.replace(/{イベント名}/,strEvent).replace(/{名前}/,strName); //社名、姓名を置換
 
    /* メールを送信 */
    GmailApp.sendEmail(
      strTo, //相手のアドレス
      strSubject,  //表題
      strBody,　//本文
      {
        from: strFrom,　//fromアドレス
        name: strSender　//差出人
      }
    ); 
  }
}
</code></pre>

以下、編集のためのcode解説

### `var docTest=DocumentApp.openById("ID"); //ドキュメントをIDで取得`

3で用意しておいた変数設定したメール文面を取得します。DocumentのURLに載っているID（例、`https://docs.google.com/document/d/＜ID＞/edit`の場合、＜ID＞の部分）をコピペしてコードのIDの部分に貼り付ける。

### `for(var i=2;i<=rowSheet;i++)`

コードに紐付いているSpreadsheetの行数をiとして設定し、2行目から尻の行までを繰り返しデータを取得→メール送信のアクションを繰り返します。

### `var strEvent=mySheet.getRange(i,1).getValue(); //イベント名`

ここではstrEventという変数を設定し、その変数に(i,1)のセルの情報を入れています。例えば一回目の処理ではi=2なので、(2,1)のセルの情報が入ります。strName,strToも同じです。変数を増やしたい場合は、Spreadsheetの列、変数を増やしましょう。

### `var strBody=strDoc.replace(/{イベント名}/,strEvent).replace(/{名前}/,strName);`

strBodyという本文の変数を作っています。この際、strDocという先ほど指定したDocumentからの文章のうち、指定した変数を入れています。例えば、GoogleDocumentで{イベント名}と指定したところには、strEventで取得した変数が入れられます。strNameも同様です。

### `GmailApp.sendEmail`

Gmailを送信します。そのとき、strToに入れられたメールアドレスに、指定したタイトル、本文で送られます。

# 関数の実行
メール文面、変数設定などを終えたらいよいよメールの送信です。
GoogleAppsScriptの左上の「ファイル」タブからコードを保存した上で、「実行」タブから「関数を実行」、「sendMail」を指定します。すると、Gmailにアクセスするための承認が要求されるため、許可を確認します。<img width="473" alt="スクリーンショット 2018-12-31 13.11.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/318907/fe64f754-6b83-f400-55f7-4a2892813598.png">
確認しようとすると、いかにも危なそうな確認画面が表示されますが、左下の「詳細」を押して、「『〜』に移動」を押し、承認します。
<img width="592" alt="スクリーンショット 2018-12-31 13.11.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/318907/f57f155f-a416-c924-604f-c5ccaca2c807.png">
<img width="595" alt="スクリーンショット 2018-12-31 13.11.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/318907/314b820d-80de-aa2c-d3ac-4895adc1829b.png">
承認を終えるとsendMail関数が実行され、メールが送信されます。