カレンダー連携で自動招待メールを送る方法

カレンダー連携で自動招待メールを送る方法
GASおじです。今回は、Googleカレンダーと連携して、会議や打ち合わせの予定ができたら自動的に招待メールを送る仕組みを作る方法を解説するよ。中小企業の経営者さんやフリーランスの方で、「会議の案内をいちいち手作業で送るのは面倒だなあ」という方にピッタリ。しかもGoogleアカウントの利用枠内で追加の専用SaaS料金なしでできるから、SaaS課金に厳しいおじさんも安心してオススメできる。
なぜカレンダー連携で自動招待メールを送るのか?
仕事のスケジュール管理にGoogleカレンダーは欠かせないツールだよね。しかし、カレンダーに予定を入れたあとに参加者へメールを送るのは手間だし、ミスも起こりやすい。そこでGoogle Apps Script(以下GAS)を使って、予定の登録と同時に招待メールを自動送信できれば、時間もコストも節約できる。
仮に1回の会議案内メール作成に5分かかるとして、1ヶ月に20件あるとすると…
5分 × 20件 = 100分(約1時間40分)
時給2,000円換算で、
2,000円 × (100分 ÷ 60分) = 約3,333円/月
年間にすると4万円ほどの時間コスト削減になる計算だ。もちろんこれは仮定の数値で、実際の効果は業務内容によるけど、手間を減らすことは確実に業務効率化につながる。
初期設定と必要な権限
GoogleカレンダーAPIの有効化
Google Cloud PlatformのプロジェクトでカレンダーAPIを有効にしよう。GASのスクリプトエディタからも設定可能だ。GASプロジェクトの権限設定
スクリプトでカレンダーの予定を読み書きし、メールを送信するために以下のスコープが必要になる。
- カレンダーの読み書き権限
- Gmail送信権限
installable triggerの設定
カレンダーの変更を検知するトリガーは直接作れないため、時間ベースのトリガーで一定間隔(例:5分おき)に予定をチェックし、新規予定を検知してメール送信を行う仕組みがおすすめだ。個人情報の取り扱い
参加者のメールアドレスを扱うため、扱いには十分注意。スクリプトのアクセス権限管理を厳重にし、不要になったらトリガーを解除するなどの対応をしよう。復元手順
予定データを直接更新・削除しない設計のため、元の予定はそのまま残る。メール送信履歴は新規の日時付きスプレッドシートに記録しているから、誤送信があっても記録を確認可能。万が一問題があればトリガーをオフにして処理を停止できる。
具体的なGASコード例
以下は、Googleカレンダーから新規に追加された予定を検知し、参加者へ招待メールを送信・記録するサンプルコードだ。既存のメール送信記録は日時付きの新規シートへ書き込む形で、既存データを上書きしない。入力検証も含めている。
function sendCalendarInvites() {
const calendarId = 'primary'; // 自分のカレンダーID
const sheetNamePrefix = '招待メール送信記録_';
const now = new Date();
const lookBackMinutes = 10; // 10分前からの新規予定を検出
const startTime = new Date(now.getTime() - lookBackMinutes * 60 * 1000);
// スプレッドシート準備(日時付き新規シート)
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheetName = sheetNamePrefix + Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const sheet = ss.insertSheet(sheetName);
sheet.appendRow(['予定ID', 'タイトル', '開始日時', '参加者メール', '送信結果', '送信日時']);
// 予定取得
const events = CalendarApp.getCalendarById(calendarId).getEvents(startTime, now);
// 処理バッチ用配列
const records = [];
events.forEach(event => {
const eventId = event.getId();
const title = event.getTitle();
const start = event.getStartTime();
const guests = event.getGuestList();
// 参加者メール一覧の取得と入力検証
const guestEmails = guests
.map(g => g.getEmail())
.filter(email => email && validateEmail(email));
if (guestEmails.length === 0) {
// 参加者なし、またはメール無効ならスキップ
return;
}
guestEmails.forEach(email => {
// 招待メール送信処理
try {
const subject = `【招待】${title}のご案内`;
const body = `こんにちは。\n\n${Utilities.formatDate(start, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm')}から予定されている「${title}」の招待メールです。\n\nよろしくお願いします。`;
MailApp.sendEmail(email, subject, body);
records.push([eventId, title, start, email, '送信成功', new Date()]);
} catch (e) {
records.push([eventId, title, start, email, '送信失敗: ' + e.message, new Date()]);
}
});
});
// バッチ書き込み
if (records.length > 0) {
sheet.getRange(2, 1, records.length, records[0].length).setValues(records);
}
}
// シンプルなメールアドレス検証
function validateEmail(email) {
const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return re.test(email);
}
このコードのポイントは以下の通り。
- 10分間隔で新規の予定を取得し、参加者のメールアドレスを検証後に招待メールを送る
- メール送信結果を日時付きの新規シートに記録し、既存データは変更しない
- 送信失敗も含めてログを残し、あとで状況を確認できる
- バッチ処理でまとめてスプレッドシートに書き込むため効率的
運用上の注意点
トリガーは時間ベースで設定
GASエディタのトリガーメニューから「時間主導型」→「分ベースのタイマー」で5分おきなどに設定しよう。これで新規予定の検知とメール送信を自動化できる。Google Apps Scriptのquota・実行上限あり
無料枠では1日あたりの送信可能メール数やAPI呼び出し制限がある。大量に送る場合は注意しよう。追加の専用SaaS料金なしでGoogleアカウントの利用枠内で運用できるが、限度はある。個人情報の管理
参加者のメールを扱うので、スクリプトの共有は必要最低限にし、権限管理をしっかり。ログも第三者に見られないように気をつけてほしい。バックアップと復元
スプレッドシートのログは消さずに残すこと。間違ってメールを送った場合はトリガーをオフにして処理を停止し、対応を検討しよう。
まとめ
GoogleカレンダーとGASを連携して自動招待メールを送る仕組みは、中小企業やフリーランスの方々の業務効率化に役立つ。SaaSの追加料金なしでGoogleアカウントの利用枠内でできるので、無駄なコスト増加も防げる。今回のコード例をベースに、自社の運用に合わせてカスタマイズしてみてほしい。
さらにGASの便利なツールやテンプレートを使いこなしたいなら、ぜひGASおじラボのメンバーシップへ!