【GAS】会議のリマインドメール自動送信するコードを紹介【コピペOK!!】
”会議開催○営業日前にリマインドメールを送る”
こんな仕事はありませんか?
特に定期的な会議だと、
毎月のことだから地味に面倒です。
送り忘れたときは「リマインドが遅くなり申し訳ありません」と付け加えなくてはならないのでさらにメンドウ。
そんな悩みを解決するリマインドメールを送るGASを紹介します。
スプレッドシートの作成
まずはスプレッドシートを作成していきます。
シート名を”会議日程”として以下のようなスプレッドシートを作成してください。
A列:ID(なくてもOK)
B列:開催日
C列:開始時間
D列:終了時間
E列:参加可否〆切
F列:会議名
G列:会議室
H列:議論内容
I列:送信予約日
J列:メール送信
I列には関数が入っています。
=WORKDAY.INTL(B2,-7,1,'祝日'!B2:B)
↑B2のところは同じ行の一致させてください。
B列の日数の7営業日前を計算する関数です。
-7は”7営業日前”を表しているので、
5営業日前がいい場合は-5となります。
このままだと日本の祝日が考慮されないので、さらに”祝日”のシートを追加しておきます。
以上がスプレッドシートの準備です。
GASコードの紹介
ツールバーの”拡張機能”→”Apps Script”を開いて、以下のGASコードを貼り付けます。
function sendMail() {
//アクティブなスプレッドシートの取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
//シートの指定
const sheet = ss.getSheetByName('会議日程');
//シートの内容を取得
const items = getItems(sheet);
//当日の日付を取得する。
const today = new Date();
today.setHours(0, 0, 0, 0);
for (i = 0; i < items.length; i++) {
//todayとメール送信日が一致し、
//かつ、メール送信列に送信済みと書いていない。
if (items[i]['送信予約日'].getTime() === today.getTime()
&& items[i]['メール送信'] != '送信済み') {
items[i]['開催日'] = changeJpDate(items[i]['開催日']);
items[i]['参加可否〆切'] = changeJpDate(items[i]['参加可否〆切']);
items[i]['開始時間'] = changeJpTime(items[i]['開始時間']);
items[i]['終了時間'] = changeJpTime(items[i]['終了時間']);
//送信先のアドレスを取得する。
let to = getAddress();
//メールタイトルを決める。
let subject = `【${items[i]['開催日']}開催】${items[i]['開催日']}${items[i]['会議名']}に関して`;
//本文を取得する。
let body = getBody(items[i]);
//下書き作成
//createDraft→sendEmailに変更するとメール送信
GmailApp.createDraft(to, subject, body);
//”送信済み”と書き込む。
let targetCol = sheet.getRange('1:1').createTextFinder('メール送信').matchEntireCell(true).findNext().getColumn();
sheet.getRange(items[i]['行数'], targetCol).setValue('送信済み');
}
}
}
//0000年00月00日(〇)の形に変える。
function changeJpDate(date) {
const jpnWeekday = ["日", "月", "火", "水", "木", "金", "土"];
const jpnNotation = Utilities.formatDate(date, 'JST', 'yyyy年M月d日');
const changedDate = jpnNotation + '(' + jpnWeekday[date.getDay()] + ')';
return changedDate;
}
//00:00の形に変える。
function changeJpTime(time) {
const jpnNotation = Utilities.formatDate(time, 'JST', 'HH:mm');
return jpnNotation;
}
/*
送信先のメールアドレスを取得する。
メンテナンスしやすいように独立させている。
改行するときは,(カンマ)をつけ、最後は不要。
*/
function getAddress(){
const address = [
'★★★@example.co.jp',
'▲▲▲@example.co.jp',
'●●●@example.co.jp'
];
return address;
}
/*
本文を取得する。
メンテナンスしやすいように独立させている。
*/
function getBody(items) {
const body = `関係者各位
お疲れ様です。
${items['会議名']}の開催が近づいてまいりました。
会議名:${items['会議名']}
開催日程:${items['開催日']} ${items['開始時間']}~${items['終了時間']}
場所:${items['会議室']}
内容:${items['議論内容']}
お忙しいところ恐縮ですが、${items['参加可否〆切']}までに
参加の可否をご連絡いただけると幸いです。
よろしくお願いします。
`
return body;
}
//スプレッドシートの内容と、
//取得した行数を追加情報として取得する。
function getItems(sheet) {
const values = sheet.getDataRange().getValues();
const headers = values.shift();
const items = [];
for (const [index, value] of values.entries()) {
const item = {};
item['行数'] = index + 2;
headers.forEach((header, index) => {
item[header] = value[index];
});
items.push(item);
};
return items;
}
あとはトリガー設定を設定していきます。
トリガーを追加
実行する関数を選択:sendMail
実行するデプロイを選択:Head
イベントのソースを選択:時間主導型
時間ベースのトリガーのタイプを選択:日付ベースのタイマー
時刻を選択:(お好きな時間帯に設定してください。おすすめは10~11時)
エラー通知設定:今すぐ受け取る(送れなかったときのために)保存する
(初回のみ)Googleから許可を求められるので、すべて許可する。
これで送信予定日になったら、配信者に自動的にメールが送られるGASコードの完成です。
トリガーについては、ときどきGoogle側のエラーで動かないことがあるので、1日2回動くようにしておくと、さらに安心です。
私は10~11時と14~15時の2つのトリガーをセットしています。
10~11時で動けば”送信済み”と記入されるので、14~15時に同じメールが届くことはありません。
さぁ、面倒なリマインドメールを送る仕事から解放されて、あなたの自由時間を増やしましょう。
本職に集中するもよし、思い切って休みを取るもよし。
以上、参考になれば幸いです。
この記事が気に入ったらサポートをしてみませんか?