GAS×Gmail自動化:受信メールを
スプレッドシートに自動記録する方法

GmailApp.search()でメールを検索し、件名・送信者・本文を自動でシートに転記する仕組みをラベル管理・トリガー設定まで解説します。

|対象: GAS / Gmail / スプレッドシート連携

Table of Contents

何を自動化できるのか

毎日届く問い合わせメールや注文通知メールを、手作業でスプレッドシートに転記している業務は少なくありません。 GASを使えば、以下のような流れを自動化できます。

Flow

01
対象条件(件名・差出人など)でメールを検索
02
メールから件名・送信者・本文・日時を取得
03
必要に応じて本文から注文番号や金額を抽出
04
スプレッドシートに1行として記録
05
処理済みメールにラベルを付与
06
時間主導トリガーで定期的に自動実行

GmailApp.search()で対象メールを取得する

Gmailの検索演算子(subject:、from:、label:など)をそのまま検索クエリとして使えます。 まずはラベルによる未処理メールの絞り込みと、シートへの書き込みまでを実装します。

function logInquiryEmails() {
  const query = 'label:未処理 subject:お問い合わせ';
  const threads = GmailApp.search(query, 0, 50);

  const sheet = SpreadsheetApp.getActive().getSheetByName("問い合わせログ");
  const processedLabel = GmailApp.getUserLabelByName("処理済み");
  const unprocessedLabel = GmailApp.getUserLabelByName("未処理");

  threads.forEach((thread) => {
    const messages = thread.getMessages();
    messages.forEach((message) => {
      sheet.appendRow([
        message.getDate(),
        message.getFrom(),
        message.getSubject(),
        message.getPlainBody().slice(0, 500),
      ]);
    });

    thread.addLabel(processedLabel);
    thread.removeLabel(unprocessedLabel);
  });
}

本文から必要なデータを抽出する

「注文番号: 12345」のように定型フォーマットで書かれている部分は、正規表現で取り出せます。 抽出したい項目ごとに専用の関数を用意しておくと、メールの書式が変わった際にも修正しやすくなります。

function extractOrderNumber(body) {
  const match = body.match(/注文番号[::]\s*([A-Za-z0-9-]+)/);
  return match ? match[1] : "";
}

function extractAmount(body) {
  const match = body.match(/合計金額[::]\s*([0-9,]+)円/);
  return match ? match[1].replace(/,/g, "") : "";
}

ラベルで二重記録を防ぐ

定期実行のたびに同じメールを再取得してしまうと、シートに重複行が増えてしまいます。 「未処理」「処理済み」の2つのラベルを用意し、処理が終わったメールはラベルを付け替えることで二重記録を防ぎます。

function setupLabels() {
  if (!GmailApp.getUserLabelByName("未処理")) {
    GmailApp.createLabel("未処理");
  }
  if (!GmailApp.getUserLabelByName("処理済み")) {
    GmailApp.createLabel("処理済み");
  }
}

トリガーで定期実行を自動化する

15分おき、1時間おきなど、業務のリアルタイム性に合わせて実行間隔を設定します。

function createGmailLogTrigger() {
  ScriptApp.newTrigger("logInquiryEmails")
    .timeBased()
    .everyMinutes(15)
    .create();
}

実務での注意点

1. GmailApp.search()の1日あたりのクォータに注意

Gmail関連の操作にはGoogleが定める1日あたりの実行回数上限があります。実行間隔を短くしすぎると上限に達する場合があるため、業務上必要な頻度にとどめましょう。

2. 個人情報を含むメールの取り扱い

氏名・住所・電話番号などを含むメールをそのまま転記する場合は、スプレッドシートの共有範囲やアクセス権限を適切に設定する必要があります。

3. 本文フォーマットの変化に備える

取引先のメールテンプレートが変更されると正規表現が一致しなくなります。抽出できなかった場合は空文字を返すなど、エラーで処理全体が止まらないようにしておくと安定します。

まとめ

GmailApp.search()による検索、正規表現によるデータ抽出、ラベルによる二重記録防止、トリガーによる定期実行を組み合わせることで、 メール確認から転記までの業務をほぼ自動化できます。まずは対象を絞った小さな仕組みから始めるのがおすすめです。

よくある質問

できます。GmailApp.search()で条件に合うメールを取得し、件名・送信者・本文・受信日時などをSpreadsheetApp経由でシートに書き込むことで、メール内容の自動記録が可能です。

GmailApp.search()の検索クエリにGmailの検索演算子(from:、subject:、after:など)を指定します。「注文確認メールだけを対象にする」「特定ドメインからのメールだけを対象にする」といった絞り込みが可能です。

処理済みのメールにGmailのラベルを付与し、次回以降の検索条件から除外する方法が確実です。「未処理」ラベルが付いたメールだけを検索し、処理後に「処理済み」ラベルへ付け替えるようにします。

本文の文字列に対して正規表現(match関数)を使います。「注文番号: 12345」のような定型フォーマットであれば、正規表現で該当箇所だけを取り出してシートの列に振り分けられます。

問い合わせメールの一覧管理、ECサイトの注文通知メールの集計、request系メールのステータス管理、フォーム送信通知の記録など、受信メールをトリガーに何らかの記録・処理を行う業務全般に応用できます。

GAS開発・業務Webシステムを
相談する。

Gmail自動化に限らず、Drive連携・OCR読み取り・Slack通知など、業務メール周りの自動化を幅広くご相談いただけます。

AI×GAS業務自動化を見る