概要
ある日、ふと思いました。メールを指定の時刻に自動的に送信できないかな、と。
そこで、今回はGoogle Apps Scriptを使ってGoogleアカウントから自動的にメールを送信してみることにします。
Google Apps Script (GAS) とは
Google Apps Script (略:GAS) とは、Googleアプリやプラットフォーム(スプレッドシートやフォームなど)を自動的に扱えるようにするScriptです。
つまり、これを使えば、ドキュメントを元にメールを送信したり、スプレッドシートを元にカレンダーにイベントを作成することができます。とても便利!!
GASはJavaScriptにGoogle Appsを操作するためのAPIを備えた形なので、プログラミング初心者でも比較的取り組みやすいのが特長です。
詳細
https://developers.google.com/apps-script/
メール自動送信システムの構築
今回は、メール自動送信システムを構築します。
スプレッドシートの準備
まず、スプレッドシートを1枚用意します。
そのシートの1行目にはヘッダーを、2行目以降には自動送信したいメールを以下のように書きます。
各項目の意味ですが、
項目名 | 書く内容 | 人が書く必要があるか |
---|---|---|
to | 宛先 | ○ |
title | メールのタイトル | ○ |
description | メール本文 | ○ |
send_mail | 送信予定日時(メールを送信したい日時) | ○ |
sent_mail | 送信完了日時(実際に送信された日時) | ×(スクリプトで使用される) |
です。
スクリプトファイルの準備
次に、GASを書くためのスクリプトファイルの用意します。
先ほど作成したスプレッドシート内メニューの「ツール」>>「スクリプトエディタ」を選択し、スクリプトファイルを作成します。
デフォルトでコード.gs
が作成されるので、そこへセルの情報を元にメールを自動送信するためのスクリプトを書いていきます。
スクリプトの中身
function calledByCron() {
var sheet = SpreadsheetApp.getActiveSheet(); // シートの取得
var startRows = 2; // 開始行数
var sheetData = sheet.getSheetValues(startRows, 1, sheet.getLastRow(), sheet.getLastColumn()); // シートのデータを取得(2次元配列)
var dtLimit = new Date(); // 現在時刻を取得
// シートの各行ごとにデータを取り出す
sheetData.forEach(function(value, index) {
// 送信完了していない、かつ送信予定日時が現在時刻より前ならば、メールを送信する
if (!value[4] && (new Date(value[3])).getTime() < dtLimit.getTime()) {
MailApp.sendEmail(value[0], value[1], value[2]); // メールを送信する
sheet.getRange(startRows + index, 4 + 1).setValue(dtLimit); // 送信完了日時をシートに書く
}
});
}
calledByCron()
を実行すれば、メールが自動送信されるという形です。
なお、初回実行時にメールを自動的に送信する権限を許可するかを聞かれますので、許可しておいてください。
実行例
上述の例で、2017/09/12 14:56:55 に calledByCron()
を実行した場合、スプレッドシートのsent_time
列が以下のように変化します。
sent_time
列の2行目に時刻が自動で入力されました。これは、2行目に設定したメールのみが送信されたという意味です。
で、確認のために送信されたメールをGmail上で開くと・・・
正常に2行目に設定したメールのみが送信されたことが確認できました。(3行目のメールは送信されないことも確認できました。)
実行の自動化
メールが送信されることが確認できたので、calledByCron()
をトリガー設定して一定時間ごとに実行するようにすれば、自動送信されるようになります。
ただし、実際のメールの送信が最大で設定よりトリガー実行間隔分遅れる可能性がありますので、ご注意ください。
なお、設定可能トリガー実行間隔は、最小で1分毎(※記事執筆時)です。つまり、1分以内の遅延を許せるなら、この方法が有効となるわけです。
おわりに
Google Apps for Business などGoogleサービスを活用している会社では、GASの使い方次第では大きなコスト削減の可能性を感じました。😃
一方で、当然ですがGoogle側の都合でサービスを変更・停止することがある(大抵、事前告知はあるようですが)ので、依存しすぎには注意したいですね。(とはいえ、やはり便利だから使ってしまいますが。)