【書きなぐり】今更ですが、GASでメール送りませんか？

#はじめに
####この記事を読む対象者　（面倒であれば先に「実際の流れ」を見てください）
- プログラミング初心者でGASを触ったことのないが何か使ってみたい人
- 業務の効率化をしたい人


####メリット
- GASでのメール送信ができる
- 企業からの自動送信メールの仕組みがわかる
- 実際に作ることでGASに興味がわく

###最終目的
このようなメールを送ることが到達点です。
（文章の内容は深夜のテンションで書いたのでご了承ください）
![スクリーンショット 2019-06-10 1.26.45（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388345/73a318d0-2070-0870-7c1f-4334c39818fd.png)


##実際のスプレッドシートとGASコード

<img width="1370" alt="スクリーンショット 2019-06-10 1.48.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388345/399d9822-803f-aba7-4ac1-5d10a4edb000.png">

![スクリーンショット 2019-06-10 0.42.42（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388345/0aa1d38e-bd93-632a-78e0-f0987b2ea053.png)


##変数の準備

```javascript

var spreadsheet = SpreadsheetApp.openById('IDを入れてね（IDはURLのところにあるyo）');//SpreadSheetファイル『Qiita』をIDから取得する
var sheetName = '送信用';//SheetNameに「Qiitaデモ」という文字列を代入することでシートを指定できる
var sheet = spreadsheet.getSheetByName(sheetName);//シート名からSheetを取得
var got_data = sheet.getDataRange().getValues();//Sheetからデータを取得
var content = got_data[0][5];//本文の内容をセルF1に入れている
var signature = '';//触って欲しくない文字はコード上に描くといいかも
    signature += '_____________________________________________' + '\n';
    signature += 'ここに署名を無理やり入れているYo ♪♪'+ '\n';
    signature += '_____________________________________________'+ '\n';
```

### var ~~~　変数　（コメントアウトと同じような説明なので折りたたみ）

<details><summary>この部分では関数を実行する前に変数を作っています。『初登場の変数を*イタリック*、２度目以降は**太字**で記入』</summary>
*spreadsheet* =SpreadsheetApp.openById() 
「IDを使って使用するスプレッドシートファイルの指定＆開く（IDの位置はググってみてください）
*sheetName* = '送信用'
*sheet* = **spreadsheet**.getSheetByName(**sheetName**)
シートの名前から一枚のシートを取得する（太字は変数なのでコードと見比べてください）
*got_data* = **sheet**.getDataRange().getValues()
シート全体から２次元配列でデータを読み取る
*content* = **got_data**[0][5]//本文の内容をセルF1に入れている
配列上の数字[]は０から、シート上の数字()は１から数え始める（今回は配列[]なので０から）　←割と重要
</details>
##関数(fanction)
```javascript

function GoGoGmail(){
}
```
実際に行なっている関数の部分。（言葉足らずなので編集リクエストお願いします）
###for の処理
```javascript

//ここの部分が難しいかも（少なくとも私にとっては）.for分のカッコ内はイメージは下の通り　
//（iを列の最大の長さとしますよ：iは必ず０より大きいですよ：回すたびにiを１ずつ減らして行きますよ）
for(var i = got_data.length-1; i>0; i--){

}
```

###if の処理
```javascript
//アドレスあり && 名前あり && 送信日なし && 結果なし　　→ 実行
    if(emailAdress != "" && Name != "" && got_data[i][5]=="" && got_data[i][6]==""){
```
==　同じ場合にtrue
!=　異なる場合にtrue
""　空白
###Gmail を送る処理


```javascript
//実際に送るメソッド
GmailApp.sendEmail(
  emailAdress,//送信先
  'テスト', //件名
  body, //本文
   {
    //bcc:　'xxx@gmail.com', ←　人様に迷惑がかかる恐れがあるのでコメントアウト
    name:'紀伊田　修一',
    form:'yyy@gmail.com',
    replyTo:'zzz@gmail.com'
   }
 );

//『結果』に'success'を記入
sheet.getRange(i+1,5).setValue('~success~');
```
GmailApp.sendEmail(*アドレス*,*送信先*,*件名*,*本文*,{*オプション*});
オプションでbcc,ccc,差出人お名前、送信元のアドレス、デフォルトの返信先の設定　などが行える。
![スクリーンショット 2019-06-10 1.26.47（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388345/21867e29-02b8-9c33-5e06-eebbc585421b.png)

####try~catch エラーの対応
```javascript

        try{ 
            GmailApp.sendEmail(
            emailAdress,
            'テスト', 
            body, 
            );
            //『結果』に'success'を記入
            sheet.getRange(i+1,5).setValue('~success~');
  
       }catch(e){
            sheet.getRange(i+1,5).setValue('!!error!!');      
            }
```
try{}~catch(){}
tryが成功した時に特定のセルにsuccessを記入
エラーが出た場合catchの処理を行う

#実際の流れ（デモなので実際の届くようなメールアドレスではありません）
<details><summary>スプレッドシートの動き</summary>
実行前
<img width="586" alt="スクリーンショット 2019-06-10 1.14.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388345/02d90513-6744-782e-4cc4-856322262981.png">
成功
<img width="593" alt="スクリーンショット 2019-06-10 1.14.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388345/971720c3-40a3-7fdf-e2b0-7f84b7f05e95.png">
失敗
<img width="588" alt="スクリーンショット 2019-06-10 1.15.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388345/268ae205-6639-152a-1287-b4c628447963.png">
メールアドレスの表記にミスがある場合はエラーという文字を入れている。
そもそも相手の名前がない場合は実行されていない（if参照）
</summary>


<details><summary>メールのイメージ</summary>
![スクリーンショット 2019-06-10 1.26.45（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388345/d17f7d23-ee84-37be-02f5-b35357e5ac3b.png)
![スクリーンショット 2019-06-10 1.26.47（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388345/9503ae96-b58c-9c37-eac4-3687386c3cf8.png)
</details>

#終わりに
今回はGASを使ったメールの方法を簡単かつ少し雑にまとめました。
私もプログラミングを始めたばかりなのでミスがあれば指摘をお願いします。

次回はこのGASに置けるクラスとメソッドをまとめようと考えています。

最後まで見ていただきありがとうございます。