【GAS】Google Apps Scriptでスプレッドシートからメール自動送信

#はじめに
今回は組織でG Suiteを契約するにあたって、アカウント情報（メールアドレスとパスワード）を自動送信するシステムを作ったので、備忘録として書いておきます。
初心者なのでコードは汚いです、許してください。
#仕組み
こんな感じにGoogle スプレッドシートに入力して、チェックを付けた人にメールが送信させるシステム
送信した人の行には「done」と表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1030972/2d218c77-8dd2-6604-9ae7-5823be349b4e.png)


#スプレッドシートを作る
**テンプレートはこちらからコピーできます**
https://docs.google.com/spreadsheets/d/1B2x-2P78ms93TuHmoyrguL9Wx5BoK1BCZeNMbuFHe4M/copy

まずはスプレッドシートを開き、シートに複数の送付先の
**苗字,名前,通知先メールアドレス,新しく作ったメールアドレス,パスワード**
を記入します。



| 完了  | メール送信予定  | 苗字  | 名前  | 通知先メールアドレス  | 新しいメールアドレス  |  パスワード |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| |  FALSE| 田中  |  太郎 |ttanaka@example.com   | ttanaka@yourdomain.com  |  GIhlIFjfljl |
|   |   |   |   |   |   |   |

※B列（メール送信予定）には　**挿入＞チェックボックス**　を入れてください。

※列は任意で減らしても増やしても問題ありませんが、通知先のメールアドレスは必須です。
※メールアドレスのドメイン名が「example」となっていますが、もちろんそれ以外のドメイン名のアドレスにも送れます。


※メールアドレスは架空の物です。


#プロジェクトを作る
次に、スプレッドシートの　ツール＞スクリプトエディタ　からプロジェクトを作ってください。
そういえば最近GASのエディタが新しくなって、使いやすくなりましたね。

「スクリプト エディタ」を開くと、「コード.gs」が開いていますので、そこにコードを入力していきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1030972/a265204f-4eae-a75e-1917-80d2d269273f.png)


#スプレッドシートからデータを貰ってメール送信するコード
コピペして動作確認してみてください。
お知らせメールの一斉送信にも代用できます。

---------------------------------------
まず、シート名を指定してシートを取得します。

**シート名を変えるのを忘れずに！**

```
function Mail(){

//スプレッドシートを取得
　var a = SpreadsheetApp.getActiveSpreadsheet();
　a.setActiveSheet(a.getSheetByName('Sheet1'));  //シートの名前を入力してください。
　var b = SpreadsheetApp.getActiveSheet();
```
次にチェックボックスがTRUEになっている場所を検索します。


```
//チェックボックス"TRUE"を検索
var textFinder = b.createTextFinder('TRUE');
var cells = textFinder.findAll();
```
チェックが入っている所に繰り返しメールを送信します。

差出人名・件名・本文は自由に指定できます。
本文で改行したい時は`\n`を、変数などをつなげたい時は途中に`+`を入れてください。

```
//繰り返す
  for(var i=0; i<cells.length; i++){
    var f = cells[i].getA1Notation();  //結果の場所を取得
    f = f.replace('B','');  //行数だけにする（アルファベットを取り除く）
    var set1 = 'C'+f;
    var set2 = 'G'+f;
    var set3 = set1+':'+set2;  //Cf:Gf(fは行の場所)
    var set4 = 'A'+f;
    b.getRange(set4).setValue("送信中...");  //A列に"送信中..."と入力
    var g = b.getRange(set3);  //範囲からデータを取得[苗字,名前,通知先メールアドレス,新しく作ったメールアドレス,パスワード]
    var j = g.getValues();
    Logger.log(j);
    var p = 0
    var h = j[p];
    var toLastName = h[0];  //苗字
    var toFirstName = h[1]  //名前
    var toAddress = h[2];  //通知先メールアドレス
    var newmail = h[3];  //新しく作ったメールアドレス
    var password = h[4];  //パスワード
  //差出人名
  var name = '[差出人名]'
  
  //本文
  var mainMessage = toLastName+' '+toFirstName+'  様\n\nこんにちは。\nGoogleアカウントを送付いたします。\n以下のメールアドレスとパスワードでGooleアカウントにログインしてください。\n\n  メールアドレス：'+newmail+'\n  パスワード：'+password;

  //件名
　　var subject= '[重要] G Suite アカウントの送付';

  //メール送信
　　MailApp.sendEmail(toAddress,subject,mainMessage,{name:name});
   b.getRange(set4).setValue("done");  //A列に"done"と入力
　　}
  }
```

スクリプトを実行すると、こんな感じのメールが来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1030972/ad621ced-2da8-47de-69c2-65647eb95809.png)


#スプレッドシートから操作できるようにする
自動化できたのは良かったんですが、毎回スクリプトエディタを開いて実行するのも面倒くさいですよね...
そこで、スプレッドシート内から操作できるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1030972/a12280c7-cb56-3137-8c5e-afeb7f6a816f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1030972/5a5e39f3-7d9f-9977-a321-d7062726969e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1030972/028c5745-2a08-1c45-ddc1-9a5dc65e4f83.png)


**とにかく「はい」や「OK」を押し続ければ、関数Mailが呼び出されます。（誤送信対策です）**

簡単なUIです。用途に合わせてカスタマイズしてください。

```
//ユーザーインターフェース
function setAlert3(){
  var ui = SpreadsheetApp.getUi();
  var response = ui.alert("パスワード自動メール送信",'チェックを付けた行のメールアドレスとパスワードを自動的に通知します。\nチェックを付けたら、「OK」を押してください。', ui.ButtonSet.OK_CANCEL);
  if (response === ui.Button.OK) {
    var response2 = ui.alert("パスワード自動メール送信",'本当に送信しますか？\n間違えのないことを確認したら、「はい」を押してください。', ui.ButtonSet.YES_NO);
     if (response2 === ui.Button.YES) {
       ui.alert('メールを送信します。プログラムが終了するまで操作しないでください！\nOKを押したら始まります。');
    Mail();  //関数を呼び出す
    } else {
    ui.alert('キャンセルされました。');
    }

  } else {
    ui.alert('キャンセルされました。');
}
}
```

##ツールバーに追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1030972/d86cf4e3-2060-cc10-ac01-289d9ecb1184.png)
こんな感じにボタンを作って、ツールバーから実行できるようにします。
（ボタンを押すと、ユーザーインターフェースが表示されます）

**このスクリプトを実行**すると、ツールバーにボタンが現れます。

```
 function onOpen(){
　　var myTest = [{name:'パスワード自動メール送信',functionName:'setAlert3'}];
　　SpreadsheetApp.getActiveSpreadsheet().addMenu('自動通知', myTest);
　}
```

###ツールバーからボタンを消す
ツールバーからボタンを消すときは、これを実行してください

```
function RemoveMenu() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
spreadsheet.removeMenu('テスト');
}
```

#使い方
1. 名前と通知先メールアドレスと新しいメールアドレスとパスワードを表に登録します。 
2. 次に、メールアドレスとパスワードを通知したい人にチェックをつけます。
3. ツールバー＞自動通知＞パスワード自動通知を押します。
　　※ツールバーとは、上部に「ファイル」とか「編集」とか並んでいる所です。

＜初回のみ＞
　承認が必要なので、「続行」を押します

　「このアプリは Google で確認されていません」と表示されますが、このアプリは安全です。
　左下「詳細」ボタンを押して、「パスワード自動メール送信に移動」を押します
　「許可」を押します
　もう一度、ツールバー＞自動通知＞パスワード自動通知を押します。

4. 画面の指示に従って、「はい」や「OK」を押し続けます。

5. 画面上部に「スクリプトが終了しました」と表示されれば完了です！
　　※送信した人の行に「done」と表示されます。

#最後に
このスクリプトを使って新たにGoogleやMicrosoftなどのアカウントを作って通知する以外にも、テキストボックスを作って選択した人に一括でメールを送信するといったことも可能です。

用途に合わせて変えてみてください～