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

GASカレンダー自動化
カレンダー連携で自動招待メールを送る方法のサムネイル

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

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万円ほどの時間コスト削減になる計算だ。もちろんこれは仮定の数値で、実際の効果は業務内容によるけど、手間を減らすことは確実に業務効率化につながる。

初期設定と必要な権限

  1. GoogleカレンダーAPIの有効化
    Google Cloud PlatformのプロジェクトでカレンダーAPIを有効にしよう。GASのスクリプトエディタからも設定可能だ。

  2. GASプロジェクトの権限設定
    スクリプトでカレンダーの予定を読み書きし、メールを送信するために以下のスコープが必要になる。

  • カレンダーの読み書き権限
  • Gmail送信権限
  1. installable triggerの設定
    カレンダーの変更を検知するトリガーは直接作れないため、時間ベースのトリガーで一定間隔(例:5分おき)に予定をチェックし、新規予定を検知してメール送信を行う仕組みがおすすめだ。

  2. 個人情報の取り扱い
    参加者のメールアドレスを扱うため、扱いには十分注意。スクリプトのアクセス権限管理を厳重にし、不要になったらトリガーを解除するなどの対応をしよう。

  3. 復元手順
    予定データを直接更新・削除しない設計のため、元の予定はそのまま残る。メール送信履歴は新規の日時付きスプレッドシートに記録しているから、誤送信があっても記録を確認可能。万が一問題があればトリガーをオフにして処理を停止できる。

具体的な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おじラボのメンバーシップへ!

GASおじラボで500ツール使い放題 →