スプレッドシートから自動でメールを送信する方法
Google Apps Script【グーグルアップススクリプト】には、プログラムのトリガー(開始する)機能があり、そのイベントを時間主導型に設定すると、プログラムの実行を指定した日時で自動化できます。この機能を利用して、決まった人に決まった時間や日数毎に、あらかじめスプレッドシートに設定した文の内容をメール送信することができます。
スプレッドシートの設定項目とトリガーの設定方法
スプレットシートの1行目は項目行とします。
- A列「名前」
- B列「メールアドレス」
- C列「件名」
- D列「メッセージ」
- E列「送信確認」
実行例
項目を入力
内容を入力
スクリプトエディタにコードを記述して
プログラムの実行タイミングを設定します。
メールの送信が済んだら送信確認列に送信済みと表示されるので
再度送信する場合は送信済みの文字列を削除する
スプレッドシートに登録した内容をメールで送信するコードと解説
function sendEmails() { var sheet = SpreadsheetApp.getActiveSheet(); var EMAIL_SENT = "送信済み"; var lastrow = sheet.getLastRow(); var lastcolumn = sheet.getLastColumn(); var dataRange = sheet.getRange(2, 2,lastrow-1,lastcolumn-1) var data = dataRange.getValues(); for (var i = 0; i < data.length; ++i) { var row = data[i]; var emailAddress = row[0]; //B列 var message = row[2]; //D列 var emailSent = row[3]; //E列 if (emailSent != EMAIL_SENT) { var subject = row[1];//C列 MailApp.sendEmail(emailAddress, subject, message); sheet.getRange(2 + i,lastcolumn).setValue(EMAIL_SENT); SpreadsheetApp.flush(); } } }
function 【ファンクション】文を使用して「sendEmails」という名前の関数を定義します。
2行目 【var sheet = SpreadsheetApp.getActiveSheet();】
スプレッドシートのアクセスを表すSpreadsheetApp【スプレッドシートアップ】クラスのgetActiveSheet【ゲットアクティブシート】メソッドでアクティブシートを取得して変数「sheet」に代入します。
3行目【var EMAIL_SENT = “送信済み”;】
文字列の「送信済み」を変数「EMAIL_SENT」に代入します。
4行目 【var lastrow = sheet.getLastRow();】
変数「sheet」に格納されているアクティブシートを表すシートクラスのgetLastRow【ゲットラストロウ】メソッドでアクティブシートのデータが入力されている最終行番号を取得して変数「lastrow」に代入します。
5行目 【var lastcolumn = sheet.getLastColumn();】
変数「sheet」に格納されているアクティブシートを表すシートクラスのgetLastColumn【ゲットラストカラム】メソッドでアクティブシートのデータが入力されている最終列番号を取得して変数「lastcolumn」に代入します。
6行目【var dataRange = sheet.getRange(2, 2,lastrow-1,lastcolumn-1)】
変数「sheet」に格納されているシートクラスのgetRange【ゲットレンジ】メソッドで1行目の項目行と1列目の「名前」列を除いたデータ範囲を取得して変数「dataRange」に代入します。
セル範囲を取得するシートクラスのgetRange【ゲットレンジ】メソッドの引数は、(開始行番号, 開始列番号, 範囲最終行番号, 範囲最終列番号)です。開始行と開始列が2行目と2列目から始まっているのでデータの最終行や列が格納されている各変数を1減算してデータ範囲を取得します。
7行目【var data = dataRange.getValues();】
データ範囲が格納されている変数「dataRange」クラスの行と列の2次元配列を返すgetValues【ゲットバリューズ】メソッドを使用してデータ範囲の値を2次元配列に格納して変数「data」に格納します。
8行目 【for (var i = 0; i < data.length; ++i) {】
For【フォー】文で繰り返し処理の始まりです。初期化式でカウンター変数「i」を宣言して0を代入します。条件式はカウンター変数「i」がlength【レングス】プロパティで取得した2次元配列変数の「data」の配列の長さより小さい間を指定し、更新式は
インクリメント演算子「++」を使用して変数「i」に1を加算します。つまり、変数「data」に格納されている配列の長さ分
処理を繰り返します。
9行目【var row = data[i];】
2次元配列変数「data」のカウンター変数「i」番目の要素を取得して変数「row」に代入します。
10行目【var emailAddress = row[0];】
2次元配列変数「row」の最初の要素 つまりB列のメールアドレスを変数「emailAddress」に代入します。
11行目 【var message = row[2];】
2次元配列変数「row」の3番目の要素 つまりD列のメールの内容を変数「message」に代入します。
12行目 【var emailSent = row[3];】
2次元配列変数「row」の4番目の要素 つまりE列の送信確認の表示セルの内容を「emailSent」に代入します。
13行目 【if (emailSent != EMAIL_SENT) { 】
if文で条件分岐します。比較演算子!=(等しくない)で変数emailSentに変数「EMAIL_SENT」に格納されている文字列の「送信済み」が格納されていなかったら、すなわちメール送信がされていなかったら以下の処理を実行する条件分岐をしています。
14行目【var subject = row[1];】
2次元配列変数「row」の2番目の要素 つまりC列の件名を変数「subject 」に代入します。
15行目 【MailApp.sendEmail(emailAddress, subject, message);】
電子メールの送信を表すMailApp【メールアップ】クラスのsendEmail【センドイーメール】メソッドでメールを送信しています。sendEmail【センドイーメール】メソッドの引数は、(メールアドレス,件名,内容)で各変数で指定しています。
16行目 【sheet.getRange(2 + i,lastcolumn).setValue(EMAIL_SENT);】
送信が済んだメール行の5列目のE列にレンジクラスのsetValue【セットバリュー】メソッドを使用して変数「EMAIL_SENT」に格納されている文字列「送信済み」を代入します。
17行目【SpreadsheetApp.flush();】
スプレッドシートへのアクセスを表すSpreadsheetApp【スプレッドシートアップ】クラスのflush【フレッシュ】メソッドを使用してスプレッドシートの変更を確定します。
以上で、スプレッドシートから自動でメールを送信するコードの解説を終了します。
ありがとうございました。