ブログ移行のお知らせ。

お世話になっております。
ライフマップ開発チームの大城です。

この度ブログサービスをNoteに移行する事になりました。
https://note.com/tech_lifemap/

短い間でしたが、お世話になりました。
移行先でも何卒よろしくお願いいたします。

それでは!

SpreadsheetとGASとGMailでメールを送信する話。

お疲れ様です。
ライフマップ開発チームの大城です。

本日はSpreadsheetとGASを使って、メールを送信してみようと思います。

何をしたいのかというと...

  1. Spreadsheetでメール内容と送信先リストを作成 
  2. GASとGMailを連携
  3. GASからメールを送信する

をやりたいと思います。

# 開発

## Spreadsheet

### スプレッドシートを作成する

新規でスプレッドシートを作成しましょう。 
サンプルはこちらです。 
https://docs.google.com/spreadsheets/d/1alCisxRr9gaUOurols6sE_ll2KAOY_AyLAwWiKStyzM/edit#gid=0

### シートを作成する

1枚目のシートの名前を『メール内容』にします。 
シートの内容は下記の表やサンプルを参考にしてください。

項目
送信元名
件名
本文

2枚目のシートの名前を『送信先リスト』にします。 
シートの内容は、下記の表やサンプルを参考にしてください。

email
test01@xxxxx.xxx
test02@xxxxx.xxx
test03@xxxxx.xxx

## Google Apps Script

### 事前準備

スプレッドシートの上部メニュー『拡張機能 > Apps Script』を選択してください。
以下のような新しいスクリプトが作成されると思います。

function myFunction() {
    
}

### メール内容を取得する

まずはスプレッドシートにあるシート『メール内容』から必要なデータを取得しましょう。
次のようにすると、先ほど作成したスプレッドシートにアクセスすることができます。

  var spreadsheet = SpreadsheetApp.getActive();
  • SpreadsheetApp: スプレッドシート操作用クラス
  • getActive(): GASに紐づいているSpreadsheetを開く関数

次にシートにアクセスします。
以下のようにすると、シート名を使ってシートにアクセスすることができます。

  var sheet = spreadsheet.getSheetByName('メール内容');

  • getSheetByName: 名前を指定してシートを開く関数

次にメール内容を取得します。 
以下のようにすると、シートの各セルから値を取得できます。

  var from_name = sheet.getRange(2, 2).getValue();
  var subject   = sheet.getRange(3, 2).getValue();
  var body_text = sheet.getRange(4, 2).getValue();
  • getRange: スプレッドシートのセルを取得する関数(開始行, 開始列, 行数, 列数)
  • getValue: 取得したセルの値を取得する関数(単体)

### 送信先リストを取得する

次に送信先リストを取得します。 
メール内容と同じ方法で、シートの各セルから値を取得します。

  var sheet = spreadsheet.getSheetByName('送信先リスト');
  var list  = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
  • getLastRow(): シートの値入力済みの最終行を取得する関数
  • getLastColumn(): シートの値入力済みの最終列を取得する関数
  • getValues(): 取得したセルの値を取得する関数(複数)

### メール送信処理の作成する

いよいよメールを送信します。
送信先リストに1件ずつメールを送信する為、繰り返し文(for)を使います。

  for (var i = 0; i < list.length; i++) {
    var to_email = list[i][0];
    var options = {}
    options['name'] = from_name;
    
    GmailApp.sendEmail(to_email, subject, body_text, options);
  }
  • GmailApp: Gメール操作用クラス
  • sendEmail(): メール送信関数(送信先メールアドレス, 件名, 本文, オプション)
  • options['name']: 送信元名

これで準備は完了です。

### メールを送信する

早速試してみましょう。
GASを保存して、作成した関数(myFunction)を選択し、実行ボタンを押してください。

『承認が必要です』と警告が表示された場合、全て許可してください。 
※ 特に問題はないと思いますが、トラブル等発生した場合は責任を負いかねますのであらかじめご了承ください。

### メールを確認する

メール送信の実行が完了したら、メールが届いているか確認してください。 
問題なく届いていれば完了になります。  

お疲れ様でした!

# 最後に

メールを一括で送れるのは便利ですよね。 
次回は、スプレッドシートからGASのスクリプトを実行したり、送信先リストによって本文中の宛先名を変えたりしようと思います。  

ではまた次回、大城でした!

---

GASのコード置いていきます!

コード.gs

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet       = spreadsheet.getSheetByName('メール内容');

  // メール内容の取得
  var from_name = sheet.getRange(2, 2).getValue();
  var subject   = sheet.getRange(3, 2).getValue();
  var body_text = sheet.getRange(4, 2).getValue();

  // 送信先リストの取得
  var sheet = spreadsheet.getSheetByName('送信先リスト');
  var list  = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();

  // メール送信
  for (var i = 0; i < list.length; i++) {
    var to_email = list[i][0];
    var options = {}
    options['name'] = from_name;
    
    GmailApp.sendEmail(to_email, subject, body_text, options);
  }
}

ブログ移行のお知らせ。

お世話になっております。 ライフマップ開発チームの大城です。 この度ブログサービスをNoteに移行する事になりました。 https://note.com/tech_lifemap/ 短い間でしたが、お世話になりました。 移行先でも何卒よろしくお願いいたします。 それでは!