【GAS】Gmailの受信メールをスプレッドシートに自動転記する方法

件名と本文形式が決まった受信メールなら、GASで最新の1件を検索し、項目ごとにスプレッドシートへ転記できます。

前提
本文の項目名と順序が変わると抽出できません。まずテスト用メールと複製シートで試してください。
法人名から数量までが記載された定型メール
目次

シートを準備する

B1〜B7に「法人名」「氏名」「住所」「電話番号」「メールアドレス」「商品」「数量」を転記します。

受信メールの内容を転記するシート

Apps Scriptのコード

function importLatestMail() {
  const targetSubject = "ご注文を受け付けました";
  const queryText = 'subject:"' + targetSubject + '" newer_than:30d';
  const threads = GmailApp.search(queryText, 0, 10);
  const messages = threads
    .flatMap(function (thread) { return thread.getMessages(); })
    .filter(function (mail) { return mail.getSubject() === targetSubject; })
    .sort(function (left, right) { return right.getDate() - left.getDate(); });

  if (!messages.length) {
    SpreadsheetApp.getUi().alert("対象メールが見つかりません。");
    return;
  }

  const bodyText = messages[0].getPlainBody();
  const pattern = /法人名:(.+?)\s*お名前:(.+?)\s*ご住所:(.+?)\s*電話番号:(.+?)\s*メールアドレス:(.+?)\s*商品:(.+?)\s*数量:(.+?)(?:\n|$)/s;
  const match = bodyText.match(pattern);
  if (!match) {
    SpreadsheetApp.getUi().alert("本文の形式が想定と異なります。");
    return;
  }

  const values = match.slice(1, 8).map(function (value) { return [value.trim()]; });
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(1, 2, values.length, 1).setValues(values);
  SpreadsheetApp.getUi().alert("最新の対象メールを転記しました。");
}

ボタンに割り当てる

「挿入」→「図形描画」でボタンを作り、図形のメニューから「スクリプトを割り当て」を選びます。関数名は importLatestMail で、括弧は不要です。

図形にスクリプトを割り当てるメニュー

認証と実行結果を確認する

初回はGmailとシートへのアクセス許可が求められます。アカウントと権限を確認し、実行後は対象メールとB1〜B7を照合してください。

受信メールの内容が各セルに転記された画面

本番運用の注意

  • メール本文に個人情報が含まれる場合はシートの共有範囲を制限する
  • この例は固定セルを上書きする。履歴が必要なら別設計にする
  • 同一件名が複数ある場合は最新受信分が対象になる

GmailAppリファレンスGoogle公式の認証ガイドも確認してください。

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