やりたいこと
社員の資格管理をしているシートから、6ヵ月前/3ヵ月前/1ヵ月前にメール通知を自動がしたかった。
(それまでは担当の人が手動でメール書いてました。。。)
シートのフォーマット
コードを書く
メニューバーの[ツール]-[スクリプトエディタ]からスクリプト編集画面にいきコードを書く。
function mailSend() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得
var sheet1 = spreadsheet.getSheets()[0]; //1枚目のシートを取得
var today = new Date(); //今日の日付取得
var today_format = Utilities.formatDate(today, "JST", "yyyy/MM/dd"); //今日の日付整形
/* 静的パラメータ */
var strFrom = "********@gmail.com";
var strCc = "";
for (var i = 2; i <= 300; i++) {
/* 動的パラメータ */
var strName = sheet1.getRange(i, 1).getValue(); //名前
/* 名前が空の場合は戻る */
if ( strName == "" ) {
continue;
}
var strTo = sheet1.getRange(i, 2).getValue(); //メールアドレス
var strQualNo = sheet1.getRange(i, 3).getValue(); //資格ナンバー
var strQualName = sheet1.getRange(i, 4).getValue(); //資格名
var strLimit = sheet1.getRange(i, 6).getValue(); //資格期限
var strLimit_format = Utilities.formatDate(strLimit, "JST", "yyyy/MM/dd"); //資格期限
var strSub = "[通知]" + strQualName + "有効期限について"; //Subject
var strBody = strName + "さん\n\nお疲れ様です。\n" +
"〇〇です。\n\n" +
"現在取得されている" + strQualName + "(" + strQualNo + ")" + "の\n" +
"有効期限が認定日から計算したところ" + strLimit_format + "で\n" +
"失効予定となっております。\n\n" +
"正確な有効期限情報は書くベンダの\n" +
"公式サイトにてご確認ください。\n\n" +
"資格試験の失効は資格手当の失効にもつながる可能性があります。\n" +
"現在更新に動いている方もいるとは思いますが、\n" +
"更新できるようであれば早めの更新をおすすめします。\n\n" +
"※更新方法\n" +
"・同資格の再合格\n" +
"・上位資格の1科目の合格\n\n" +
"以上よろしくお願いします。";
var strLimit_30Date = new Date(strLimit.getYear(), strLimit.getMonth(), strLimit.getDate() - 30); //期限の30日前
var strLimit_30Date_format = Utilities.formatDate(strLimit_30Date,"JST","yyyy/MM/dd"); //期限の30日前整形
var strLimit_90Date = new Date(strLimit.getYear(), strLimit.getMonth(), strLimit.getDate() - 90); //期限の90日前
var strLimit_90Date_format = Utilities.formatDate(strLimit_90Date,"JST","yyyy/MM/dd"); //期限の90日前整形
var strLimit_180Date = new Date(strLimit.getYear(), strLimit.getMonth(), strLimit.getDate() - 180); //期限の180日前
var strLimit_180Date_format = Utilities.formatDate(strLimit_180Date,"JST","yyyy/MM/dd"); //期限の180日前整形
/* 今日の日付が期限の30/90/180日前だった場合、メールを送信 */
if ( today_format == strLimit_30Date_format || today_format == strLimit_90Date_format || today_format == strLimit_180Date_format ) {
var send = GmailApp.sendEmail(
strTo,
strSub,
strBody, {
from: strFrom
}
);
}
}
}
cron設定をする
これで一日一回このスクリプトが実行され、ちょうど期限から30/90/180日前の人にメールが飛ぶようになる。
もっとかっこよく短い書き方あったら教えてください;;