メール下書きを定期的にGASで自動保存

GASGmail効率化
メール下書きを定期的にGASで自動保存のサムネイル

メール下書きを定期的にGASで自動保存

はじめに

お疲れ様です、GASおじです。中小企業の経営者やフリーランスの皆さんは、日々のメール対応に追われていませんか?特に重要なメールを書いている途中で誤って内容を消してしまったり、ブラウザのクラッシュで下書きが消えるといったトラブルは避けたいものです。

そこで今回は、Google Apps Script(以下GAS)を使ってGmailのメール下書きを定期的に自動保存する仕組みを紹介します。これにより、書きかけのメールを安全にバックアップでき、万一のデータ消失リスクを下げられます。もちろん、GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使えますが、quotaや実行上限はあるので注意しましょう。

初期設定と権限について

スクリプトを動かすには、まずGoogle Apps Scriptのプロジェクトを作成し、Gmail APIを有効にします。これには以下の手順が必要です。

  1. Googleドライブで新規に「Google Apps Script」プロジェクトを作成。
  2. メニューの「サービス」から「Gmail API」を追加。
  3. スクリプトの実行時に、Gmailの下書きを読み書きする権限(https://www.googleapis.com/auth/gmail.modify)を許可。

また、この自動保存スクリプトは定期的に動かすために、Installable Trigger(時間主導型トリガー)を設定します。トリガーはGASの編集画面で「時計マーク」から追加可能です。

メール下書き自動保存の設計方針

おじさんが気をつけているのは、既存の下書きを勝手に消したり上書きしてしまわないこと。今回紹介するスクリプトは、既存の下書きを削除しないで、新しい日時付きのスプレッドシートにバックアップをとります。

また、入力チェック(下書きが空でないかなど)を行い、バッチ処理でまとめて保存。バックアップがあるので、問題があればいつでも復元できます。

復元手順は、バックアップシートを参照し、必要なメール本文をコピーしてGmailの下書きに貼り付ける形です。復元自動化も可能ですが、誤操作防止のため今回は手動復元を推奨します。

コード例:メール下書きを自動バックアップ

function backupGmailDrafts() {
  const userEmail = Session.getActiveUser().getEmail();
  const now = new Date();
  const formattedDate = Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
  const backupSheetName = `DraftBackup_${formattedDate}`;

  // 下書き取得(最大100件)
  const drafts = GmailApp.getDrafts(0, 100);
  if (drafts.length === 0) {
    Logger.log("下書きがありません。");
    return;
  }

  // 新しいスプレッドシートを作成しバックアップ用シートを追加
  const backupSpreadsheet = SpreadsheetApp.create(`GmailDraftBackup_${formattedDate}`);
  const sheet = backupSpreadsheet.getActiveSheet();
  sheet.setName(backupSheetName);

  // ヘッダー設定
  const headers = ['取得日時', '下書きID', '件名', '本文', '宛先', 'Cc', 'Bcc'];
  sheet.appendRow(headers);

  // バッチ書き込み用データ配列
  const batchData = [];

  drafts.forEach(draft => {
    const message = draft.getMessage();
    const subject = message.getSubject();
    const body = message.getRawContent(); // 生のメールコンテンツ
    const to = message.getTo();
    const cc = message.getCc();
    const bcc = message.getBcc();

    // 簡単な入力検証:件名と本文のどちらかが空の場合はスキップ
    if ((!subject || subject.trim() === '') && (!body || body.trim() === '')) {
      return;
    }

    batchData.push([formattedDate, draft.getId(), subject, body, to, cc, bcc]);
  });

  if (batchData.length === 0) {
    Logger.log("バックアップ対象の下書きがありません。");
    return;
  }

  // バッチでまとめてシートに書き込み
  sheet.getRange(2, 1, batchData.length, headers.length).setValues(batchData);

  Logger.log(`下書きを${batchData.length}件、スプレッドシートにバックアップしました。`);
  Logger.log(`バックアップファイルURL: ${backupSpreadsheet.getUrl()}`);
}

ポイント解説

  • GmailApp.getDrafts(0, 100)で最大100件の下書きを取得。
  • 取得した下書きを、日時付きの新しいスプレッドシートに保存(既存データは触らない)。
  • 件名と本文の両方が空の下書きはバックアップ対象外にして無駄なデータを減らす。
  • バッチ書き込みで処理高速化。
  • ファイルのURLをログに出すので、すぐアクセス可能。

installable triggerの設定例

このスクリプトを例えば1時間に1回自動実行したい場合、GASの編集画面から以下のようにトリガーを作成します。

  1. メニューの「トリガー」または時計アイコンをクリック。
  2. 「トリガーを追加」で関数名にbackupGmailDraftsを選択。
  3. イベントの種類を「時間主導型」、時間ベースのトリガーを「1時間おき」などに設定。
  4. 保存。

こうすることで、手動操作なしに定期的に下書きのバックアップが取得できます。

復元手順のポイント

万が一メール下書きが消えてしまった場合は、以下の手順で復元可能です。

  1. バックアップ用スプレッドシートを開く。
  2. 必要な下書きの行を探し、本文や宛先をコピー。
  3. Gmailの「下書き」新規作成画面に貼り付けて保存。

自動で復元するスクリプトも作れますが、誤って古い内容で上書きするリスクもあるため、手動復元をおすすめします。

コスト削減のイメージ

仮にメールの誤消去による作業ロスが月に2時間、時間単価を3,000円とすると、

月間削減額 = 2時間 × 3,000円 = 6,000円
年間削減額 = 6,000円 × 12ヶ月 = 72,000円

この程度の効率化効果が期待できます。ただし、個人差や環境によって異なるため、あくまで参考値です。

またGASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使えますが、quotaや実行上限には注意してください。大量の下書きを扱う場合は分割実行など工夫が必要です。

個人情報の取り扱いと注意点

  • このスクリプトはGmailの下書き内容をスプレッドシートに保存します。
  • スプレッドシートの共有設定は必ず限定的にし、情報漏洩に注意してください。
  • 重要な個人情報や機密情報を扱う場合は、バックアップファイルの管理に十分配慮しましょう。

まとめ

Gmailのメール下書きを定期的にGASで自動保存することで、誤消去やブラウザトラブル時のリスクを減らせます。既存データを削除せず安全にバックアップし、復元も手動で行えるので安心です。

Googleアカウントの利用枠内で追加の専用SaaS料金なしで使えますが、quota制限はあるので適切な運用を心がけてください。初期設定やトリガー設定も簡単なので、ぜひ試してみてくださいね。

もっと便利なGASツールや効率化アイデアを知りたい方は、GASおじラボのメンバーシップで500以上のツールを使い放題です。興味ある方はこちらからどうぞ↓

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