0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GAS】Gmailの特定ラベルが付いたメールをGoogleスプレッドシートへ自動抽出・一覧化する方法(重複防止機能付き)

0
Posted at

はじめに
問い合わせメールやシステム通知メールなど、特定の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:flag_mm: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) にて配布しております。実務に即投入したい方はご活用ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?