はじめに
問い合わせメールやシステム通知メールなど、特定のGmailメールの内容をGoogleスプレッドシートに自動で集約・一覧化したいケースはよくあります。
本記事では、Zapier等の有料外部ツールを使わず、Google Apps Script (GAS) のみで処理済み判定(重複防止)を含めた全自動抽出ロジックを実装する方法を解説します。
処理ロジックとフロー
GmailApp.search() で未処理の指定ラベル付きメールを検索(label:"対象ラベル" -label:"処理済み")
メールから日時・From・件名・本文を取得
sheet.getRange().setValues() でスプレッドシート末尾に一括追記
転記完了したスレッドに 処理済み ラベルを付与して二重処理を防止
ソースコード
function extractGmailToSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const targetLabel = 'お問い合わせ';
const processedLabel = '処理済み';
// ラベル存在確認
let pLabelObj = GmailApp.getUserLabelByName(processedLabel) || GmailApp.createLabel(processedLabel);
// 未処理メールの検索
const threads = GmailApp.search(label:"${targetLabel}" -label:"${processedLabel}", 0, 20);
let rows = [];
for (const thread of threads) {
for (const msg of thread.getMessages()) {
rows.push([
Utilities.formatDate(msg.getDate(), 'JST', 'yyyy-MM-dd HH
ss'),
msg.getFrom(),
msg.getSubject(),
msg.getPlainBody().substring(0, 300)
]);
}
thread.addLabel(pLabelObj); // 処理済みラベル付与
}
if (rows.length > 0) {
sheet.getRange(sheet.getLastRow() + 1, 1, rows.length, rows[0].length).setValues(rows);
}
}
まとめ・拡張版のご案内
エラーハンドリングや自動ヘッダー生成、大量メール処理に対応した完全版スクリプトおよび詳細な図解導入マニュアルは、note(B2B Tools) にて配布しております。実務に即投入したい方はご活用ください。