GAS×Gmail自動化:受信メールを
スプレッドシートに自動記録する方法
GmailApp.search()でメールを検索し、件名・送信者・本文を自動でシートに転記する仕組みをラベル管理・トリガー設定まで解説します。
Table of Contents
何を自動化できるのか
毎日届く問い合わせメールや注文通知メールを、手作業でスプレッドシートに転記している業務は少なくありません。 GASを使えば、以下のような流れを自動化できます。
Flow
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通知など、業務メール周りの自動化を幅広くご相談いただけます。