【GAS】Gmailの自動送信で月次リマインダーを作る方法

毎月決まった日に、Gmailからリマインドメールを自動送信できますか?

はい。Google Apps Scriptでメール送信関数と月次トリガーを1回設定すれば、以後は自動で送信できます。この記事では、重複トリガーを防ぎ、送信前に残り宛先数も確認するコードを使います。

振込、請求、定期点検など、毎月忘れたくない作業を自分宛てのメールで知らせる仕組みです。Googleアカウントがあれば追加サービスなしで作れます。

最初は必ず自分宛てにテストしてください。
宛先、件名、本文が正しいことを確認してからトリガーを設定します。Apps Scriptの時間主導トリガーは、秒単位の定刻実行には向きません。

目次

月次リマインダーの仕組み

今回作るスクリプトには、メールを送る関数と、その関数を毎月呼び出す設定用関数の2つがあります。

関数役割実行する回数
sendMonthlyReminder宛先、件名、本文を使ってメールを送る初回テストは手動、以後は自動
setupMonthlyTrigger月次トリガーを作り直す設定時に1回

指定時刻には実行幅がある

Google公式仕様では、時間主導トリガーの時刻は少しランダム化されます。たとえば9時を指定すると、通常は9時から10時の間に実行されます。nearMinute(0)を追加すると9時0分付近へ寄せられますが、それでも前後15分程度の幅があります。

厳密な締切直前ではなく、作業に余裕を持てる時刻へ設定してください。仕様はGoogle公式のインストール型トリガーClockTriggerBuilderリファレンスで確認できます。

メール送信には日次上限がある

Apps Scriptのメール上限は送信通数ではなく宛先数で数えられます。現行の公式表では、個人向けGoogleアカウントが1日100宛先、Google Workspaceが1日1,500宛先です。上限は変更される場合があるため、記事のコードでは実行時の残り宛先数を確認します。

最新値はGoogle公式のApps Script割当量を確認してください。

Apps Scriptプロジェクトを作る

  1. STEP1
    Apps Scriptを開く

    リマインダーを送るGoogleアカウントへログインし、Apps Scriptのホームを開きます。「新しいプロジェクト」をクリックしてください。

    Apps Scriptホームの新しいプロジェクトボタン
  2. STEP2
    プロジェクト名を付ける

    エディタが開いたら、「無題のプロジェクト」をクリックし、「月次リマインダー」など用途が分かる名前へ変更します。

    新規Apps Scriptプロジェクトのエディタ画面

コードを貼り付けて内容を変更する

完成コード

Code.gsに最初から入っているコードを消し、次のコードへ置き換えます。コードブロック右上のボタンでコピーできます。

const recipientAddress = 'example@gmail.com';
const subjectText = '月末処理のリマインド';
const messageText = '振込と請求書の確認を行ってください。';
const monthDate = 28;
const startHour = 9;
const minuteMark = 0;
const timeZone = 'Asia/Tokyo';

function sendMonthlyReminder() {
  const remainingRecipients = MailApp.getRemainingDailyQuota();
  if (remainingRecipients < 1) {
    throw new Error('本日のメール送信可能数が残っていません。');
  }

  MailApp.sendEmail(recipientAddress, subjectText, messageText);
}

function setupMonthlyTrigger() {
  const handlerName = 'sendMonthlyReminder';
  const triggerItems = ScriptApp.getProjectTriggers();

  for (let pos = 0; pos < triggerItems.length; pos++) {
    const item = triggerItems[pos];
    if (item.getHandlerFunction() === handlerName) {
      ScriptApp.deleteTrigger(item);
    }
  }

  ScriptApp.newTrigger(handlerName)
    .timeBased()
    .onMonthDay(monthDate)
    .atHour(startHour)
    .nearMinute(minuteMark)
    .inTimezone(timeZone)
    .create();
}

変更する7項目

設定入力内容
recipientAddress送り先のメールアドレス自分のGmail
subjectTextメールの件名月末処理のリマインド
messageTextメール本文振込と請求書を確認
monthDate毎月の日付28
startHour開始する時間帯9
minuteMark寄せたい分0
timeZone基準のタイムゾーンAsia/Tokyo

日付は28日以前がおすすめです。
29日、30日、31日は存在しない月があります。「毎月末日」の実行が必要なら、日次トリガーで翌日が翌月か判定する別設計が必要です。

重複トリガーを防ぐ仕組み

setupMonthlyTriggerは、同じ送信関数を呼び出す既存トリガーを先に削除してから、新しいトリガーを1つ作ります。設定を変更して再実行しても、同じメールが複数回送られにくい構成です。

入力が終わったら保存します。プロジェクト名とコードが保存された状態を確認してください。

月次リマインダーのコードを保存したApps Scriptエディタ

自分宛てにテスト送信する

送信関数を手動実行する

  1. 1上部の関数選択欄で sendMonthlyReminder を選びます。
  2. 2「実行」をクリックします。
  3. 3初回だけ表示される承認画面で、使用するGoogleアカウントを選びます。
  4. 4表示された権限内容を確認し、自分で作ったプロジェクトであることを確かめて許可します。
  5. 5受信メールとGmailの送信済みトレイを確認します。
sendMonthlyReminderを選んで実行するツールバー

承認画面は表示内容を確認して進める

承認画面の文言や順番はGoogle側の変更で変わります。古い画面例のボタン位置を追うのではなく、プロジェクト名、利用アカウント、メール送信権限の内容を確認してください。

自分で作っていないスクリプトや、目的に合わない権限を要求するスクリプトは承認しません。詳細はGoogle公式の承認ガイドで確認できます。

月次トリガーを設定する

設定用関数を1回実行する

テストメールが正しく届いたら、関数選択欄を setupMonthlyTrigger に変更し、「実行」をクリックします。この関数はトリガーを設定するだけなので、実行した瞬間にリマインドメールは送信されません。

インストール型トリガーは、トリガーを作成したGoogleアカウントの権限で動きます。共同編集者がコードを変更しても、送信元と送信上限はトリガー作成者側が基準です。

setupMonthlyTriggerを選んで実行するツールバー

トリガー画面で登録内容を確認する

左側の目覚まし時計アイコン「トリガー」を開き、sendMonthlyReminderの時間主導型トリガーが1件だけ表示されていることを確認します。

Apps Scriptのトリガー一覧に登録された月次トリガー

右側の編集ボタンから、イベントのソース、月の日付、時刻を確認できます。コード側で設定を変えた場合は、setupMonthlyTriggerをもう一度実行してください。

月次の時間主導型トリガー設定画面

届かない・重複するときの確認

メールが届かない

宛先の入力、迷惑メール、Gmailの送信済みトレイを確認します。次にApps Script左側の「実行数」を開き、該当時刻の実行が「完了」か「失敗」かを確認してください。

インストール型トリガーの失敗は、その場の画面には表示されません。Google公式仕様では、失敗通知メールと実行履歴からエラーを確認します。

同じメールが複数届く

トリガー一覧に同じ送信関数が複数登録されていないか確認します。記事の設定用関数を再実行すると、同じ関数の既存トリガーを削除して1件へ作り直します。

設定した日や時刻に届かない

29日以降を指定している場合は、その日が存在しない月があります。また、時刻には実行幅があります。プロジェクト設定のタイムゾーンと、コードの Asia/Tokyo も確認してください。

送信上限のエラーになる

MailApp.getRemainingDailyQuota()は、その実行時点で送信できる残り宛先数を返します。上限が戻るまで待ち、複数アカウントへ分散して制限を回避する運用はしません。

MailApp公式リファレンスでは、残り宛先数の取得とメール送信メソッドを確認できます。

まとめ

  • 送信関数を自分宛てに手動実行し、内容と権限を先に確認する
  • 設定用関数を1回実行し、月次トリガーを1件だけ登録する
  • 日付は28日以前にし、時刻には実行幅がある前提で設定する
  • 届かないときは「実行数」と失敗通知メールを確認する
  • 送信上限は宛先数で数え、実行時の残り宛先数を確認する

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次