#はじめに
コロナ対策で、定期的にオフィスの窓を開けて換気が必要なのだが
1時間ごとに声をかけるのも、メールを作成して送るのも大変(そもそも忘れる)
そこで、GAS(Google Apps Script)でメールを自動で定期的に送信するスクリプトを書いたので共有
#やりたいこと
- 1時間ごとの毎正時(9:00、10:00、11:00...)に、決まった宛先(全社員が入っているグループアドレス宛)にメールを自動送信したい
- メールのタイトルに「10:00」など、送信する時間を入れたい
- 8〜20時の間のみ送りたい
- 土日以外のみ送りたい
#準備するもの
- Googleアカウント(無料版でも有料版でもOK)
会社でGmailを使っているならそのアカウントを流用できる
会社のGoogleアカウントがなくても、個人用のアカウントで作成も可能
#手順
大きく3ステップです。
1. プロジェクトの作成
2. スクリプトのテスト
3. トリガーの設定
##1. プロジェクト(スクリプトを書くファイル)の作成
- Googleアカウントにログイン
- Google Apps Scriptにアクセス
-
新しいプロジェクト
をクリック
- こんな感じのエディタ画面が開く
function mail() {
var dayNum = new Date().getDay(); //①曜日判定用の変数
var currentMinutes = new Date().getMinutes(); //②現在時刻の"MM"の部分(何分か)
//③現在時刻の"MM"の部分が、10より小さいか判定
if (currentMinutes <=10) {
var currentHour = new Date().getHours();
}
else {
var currentHour = new Date().getHours()+1;
}
var to = ['★★★ここに送信したいメールアドレスを入力★★★']; //④メール送信先
//複数アドレスに送りたい場合は、下記のように , で区切って入力する
//var to = ['hogehoge@gmail.com, foo@yahoo.co.jp'];
var title = "【" +currentHour + ":00】換気のお願い"; //⑤メールタイトル
var body = //⑥メール本文
"みなさま\n\n"
+ currentHour + ":00になりました。換気を行ってください。\n\n"
+ "・窓際の方は、【1時間に1回】窓を10分以上あけてください。\n"
+ "・可能であれば、廊下側も空けて通気の確保をしてください。\n"
+ "・窓際の人(MGR)の不在時は、近くの方が必ず窓をあけてください。";
//⑦曜日判定(日曜日と土曜日の時には処理を避ける)
if (dayNum != 0 && dayNum != 6) {
if (currentHour > 7 && currentHour < 21) { //⑧送信する時間を8〜20時に限定
MailApp.sendEmail(to.join(','), title, body); //⑨メール送信処理
}
}
setTrigger(); //⑩次の正時のトリガーを設置する
}
function setTrigger(){
delTrigger();
var currentTime = new Date();
var setTime = new Date(currentTime.setHours(currentTime.getHours()+1));
setTime.setMinutes("00");
ScriptApp.newTrigger('mail').timeBased().at(setTime).create();
}
function delTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "mail") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
##2. スクリプトのテスト
書いたスクリプトが正しく挙動するか確認しましょう
※テストを行う際は、メールの送信先を自分のアドレスに変えるなど、送信しても影響のないものに変更してください。
- 送信先のアドレスを、自分のメールアドレスなどに変更する
- 関数名で
mail
を選択し、デバッグボタン(虫みたいなアイコン)
をクリック
##3. トリガーの設定
スクリプトを書いただけでは、自動送信されません。
最初に1回だけトリガーを設定する必要があります。
- 時計のアイコンをクリック
#コード解説
#####①曜日判定用の変数
土曜日(6)と日曜日(0)に送らないように、object.getDay()
で曜日を数字で取得しています。
#####②現在時刻の"MM"の部分(何分か)
関数mail
を実行した時刻が何分かによって条件分岐させるために、10:01の"01"の部分を取得しています。
#####③現在時刻の"MM"の部分が、10より小さいか判定
関数mail
は、正時に起動するように設定していますが、微妙にタイムラグが発生することがあります(9:59や10:01に起動する可能性がある)。
そこで、minutesの部分(:59、:01)を取得してその数字の大きさによって処理を分けています。
こうすることによりタイムラグが発生しても、意図した時間でメール送信ができます。
- 10以下の場合(10:00〜10:10)→ currentHourは"10"
- 10より大きい場合(9:10〜9:59)→ currentHourは"10"
※10分以上のタイムラグを確認していないので、適当に10としてます。
#####④メール送信先
送信したいメールアドレスを入力します。
複数アドレスに送りたい場合は、,(カンマ)で区切ってください。
例)var to = ['hogehoge@gmail.com, foo@yahoo.co.jp'];
#####⑤メールタイトル
③で取得した時間を、メールの件名に設定しています。
メールが送信される時間が10:01や9:59だとしても、そこは一律で【10:00】と表示されるようにしています。
#####⑥メール本文
送信されるメール本文の内容です。改行は、""に囲まれた部分で\n
です。
サンプル文をメールにすると下記のようなメールが届きます。
みなさま
10:00になりました。換気を行ってください。
・窓際の方は、【1時間に1回】窓を10分以上あけてください。
・可能であれば、廊下側も空けて通気の確保をしてください。
・窓際の人の不在時は、近くの方が必ず窓をあけてください。
#####⑦曜日判定(日曜日と土曜日の時には処理を避ける)
メール送信処理を行う前の条件分岐です。
①で取得した数字をもとに、現在が土曜日(6)でも日曜日(0)でもない場合に、処理を進めています。
#####⑧送信する時間を8〜20時に限定
③で取得した時間をもとに、現在が8〜20時の場合に、メール送信処理を行うように条件分岐しています。
#####⑨メール送信処理
ここでメールを送信しています。
MailApp.sendEmail
の引数は(送信先, 件名, 本文)
です。
この時、送信先を格納した変数に対して.join(',')
のメソッドをつけないと、メールアドレスとしてうまく認識してくれません。
※送信先のアドレスが1つの場合でも必要です。
#####⑩次の正時のトリガーを設置する
メールを送信してもしなくても、次の正時のトリガーを設置するために、関数を呼び出しています。
※ここでは、setTrigger
とdelTrigger
の説明は省略します。
それぞれ、
-
setTrigger
:次のmail
関数のトリガーを設置するためのもの -
delTrigger
:実行し終わったmail
関数のトリガーを削除するためのもの
と考えていただければ問題ありません。
#最後に
コロナウイルスの対策として、3密(密閉、密集、密接)を避けるのが有効とされています。
この定期メールの自動送信で、密閉
を解消し、少しでもコロナ感染のリスクを下げられたら幸いです。
私の会社ではこれを導入したことにより、換気が徹底されています。