【GAS】毎月20日にGmailの下書きを自動作成するスクリプト
- 2025年2月25日
 - Google Apps Script
 
毎月決まった日に同じ宛先にメールを送ることはありませんか?
私の場合、このようなことがあります。
- 毎月26日ごろになったら来月分の原稿をお客さんにメールで要求する準備をする。
 - 毎月25日に社員への給与明細をメールで送る準備をする。
 - 月末になったら請求書をメールで送る準備をする。
 
業務の内容や担当・役割によってメールの内容が変わり、送るタイミングも変わってきます。
これは、GmailとスプレッドシートとGoogle Apps Scriptで自動化できます。
<使うもの>
- Googleスプレッドシート
 - Google Apps Script
 - Gmail
 
<下準備>
Googleスプレッドシートに以下のような列を作成します。

- ID:行を管理するための数字を入れます。(何も書かなくても良いです)
 - 宛先:メールの送信先アドレス(実際のメールアドレスを記入してください)
 - 件名:メールの件名
 - 本文:メールの本文
 - メール下書き作成日:メールを自動作成した日にち
 - 下書き履歴:自動作成された日にちと成功の可否が記録されます。(空欄で良いです)
 
スプレッドシートの「メール下書き作成日」セルの中に以下の関数を記述します。
毎月20日を指定する場合
=DATE(YEAR(TODAY()), MONTH(TODAY()), 20)
毎月10日の場合
=DATE(YEAR(TODAY()), MONTH(TODAY()), 10)
月末の場合
=EOMONTH(TODAY(), 0)
関数を使うことで毎月同じ日に実行できるようになります。
ここまでの下準備ができたら、実際にスクリプトを貼り付け、実行できる環境を作成します。
<手順>
1. Google Apps Scriptエディタを開きます。
Googleスプレッドシートの拡張メニューの中のApps Scriptを選択します。

以下のようなApps Scriptのエディタ画面が開きます。

2. 次のコードをエディタにコピー&ペーストします。
//日付を比較する
function isSameDay(date1, date2) {
  var d1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
  var d2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
  return d1.getTime() === d2.getTime();
}
//スプレッドシートの情報をもとに下書きメールを作成する
function createGmailDrafts() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  // ヘッダー行をスキップ
  for (var i = 1; i < data.length; i++) {
    var id = data[i][0];
    var recipient = data[i][1];
    var subject = data[i][2];
    var body = data[i][3];
    var draftDate = data[i][4];
    var resultCell = sheet.getRange(i + 1, 6); // 結果を出力するセル
    // メール下書き作成日が今日(当日)だった場合のみ処理
    if (isSameDay(draftDate, new Date())) {
      var now = new Date();
      var formattedDate = Utilities.formatDate(now, Session.getScriptTimeZone(), "yyyy/MM/dd HH:mm:ss");
      try {
        GmailApp.createDraft(recipient, subject, body);
        resultCell.setValue(formattedDate + " - 成功");
        Logger.log("下書きを作成しました:ID=" + id);
      } catch (e) {
        resultCell.setValue(formattedDate + " - 失敗: " + e);
        Logger.log("下書きの作成に失敗しました:ID=" + id + ", エラー=" + e);
      }
    }
  }
}

3 スクリプトを保存し、実行ボタン(▶実行)をクリックします。
この時、承認を求められた場合は許可します。許可しないとGmailとスプレッドシートへの連携ができません。
4. Gmailで下書きができていることを確認します。
Gmailで下書きが作成されていれば下書き作成までは成功です。
ここから先は、メール下書き作成日で指定した日にちに自動実行する設定になります。
5.スクリプトを保存し、トリガーを作成します。
左メニューからトリガーをクリックして、トリガー作成ボタンをクリックします。

トリガーの設定を以下のように設定します。

- 実行する関数を選択:createGmailDrafts
 - デプロイ時に実行:Head
 - イベントのソースを選択:時間主導型
 - 時間ベースのトリガーのタイプを選択:日付ベースのタイマー
 - 日付を選択:スプレッドシートのメール下書き作成日列に入力した日付を選択
 - 時刻を選択:任意の時間を選択
 - エラー通知設定:任意で選択
 
保存します。
6. 上記のトリガーで設定した内容でスケジュールに基づいて、または特定のイベントが発生したときに実行されるようにトリガーを設定します。
スプレッドシートの「メール下書き作成日」に記載した日にちになるとスクリプトが自動実行され、Gmailの下書きが自動作成されます。
下書きに保存されたメールは自動送信されませんので、内容を確認、適宜修正して手動で送信してください。
いかがでしたでしょうか?
スクリプトに慣れていない方は少し難しい部分もあるかもしれません。
毎月の決まったタスクは自動化することで忘れることもなくなりますのでぜひ活用してみてください。
