メールの添付ファイルを毎回手でダウンロードして保存するのが面倒
先に結論
Gmailのフィルタで対象メールに専用ラベルを付け、Apps Scriptがその添付をドライブのフォルダへ保存します。
保存後にラベルを外し、同名のファイルは作りません。
- Gmailで専用ラベルを作り、フィルタで自動で付ける
- 保存先フォルダのIDを控える
- Apps Scriptにコードを貼り、1回手で実行して許可する
- 1時間ごとのトリガーを1つ作る
- ラベルが消えてフォルダにPDFが増えれば完了
請求書は月に何通も届き、毎回の保存が手間です。
※画面名は2026年11月時点のものです。

1専用ラベルと保存先を用意する
パソコンのGmailで 請求書保存 など新しいラベルを作ります。保存後に外れるので、整理用のラベルとは分けます。フィルタでこのラベルを付けます(作り方は問い合わせメールの仕分け)。
保存先はドライブでフォルダを開き、アドレスの folders/ 以降を ? の手前まで控えます(この記事の補足)。
2コードを貼って1回実行する
- script.google.com の「新しいプロジェクト」で中身を下のコードに替え、1〜3行目を書き換えて保存
- プルダウンで saveAttachments を選び「実行」
- 権限を選ぶ画面が出たら、Gmailとドライブの両方を許可する
- 「このアプリは確認されていません」と出たら「詳細」 → 「(プロジェクト名)に移動(安全ではありません)」で続行
const LABEL_NAME = '請求書保存';
const FOLDER_ID = 'ここにフォルダID';
const ONLY_PDF = true; // PDF以外も保存するなら false に
function saveAttachments() {
const label = GmailApp.getUserLabelByName(LABEL_NAME);
if (!label) throw new Error('ラベル名を確認');
const folder = DriveApp.getFolderById(FOLDER_ID);
for (const thread of label.getThreads(0, 20)) {
const msgs = thread.getMessages();
for (const msg of msgs) {
const stamp = Utilities.formatDate(msg.getDate(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
let n = 0;
for (const att of msg.getAttachments({ includeInlineImages: false })) {
const name = att.getName();
if (ONLY_PDF && !/\.pdf$/i.test(name)) continue;
const fileName = `${stamp}_${++n}_${name}`;
if (folder.getFilesByName(fileName).hasNext()) continue;
folder.createFile(att.copyBlob().setName(fileName));
}
}
thread.refresh();
if (thread.getMessageCount() === msgs.length) thread.removeLabel(label);
}
}
ラベルありまだ保存していない印
保存が済むとラベルを外す。途中で止まったり処理中に新着が来たりしたら、ラベルを残して次の実行でやり直す。保存したファイルを移動・改名すると同名チェックが効かず再保存されることがあるので、整理するならコピーする
名前にメールの日時と添付の番号を付け、同名があれば作りません。インライン画像は除き、同じスレッドのほかのメールのPDFも保存されます。
出典: Class GmailMessage / Class GmailThread / Class Folder
承認時、自分で貼ったコード以外は許可しない(この記事の提案)。会社のアカウントは、管理者が許可していないと承認できないことがあります。
出典: データアクセスの監視と制限
31時間ごとに動かす
- 左の「トリガー」 → 右下の「トリガーを追加」
- 関数 saveAttachments と時間主導型のタイプを選び、間隔を1時間ごとにする
- 「保存」を押す
トリガーは1件だけにします(2件あると同時に動き二重保存の原因に。この記事の提案)。止めるときは script.google.com の「マイ トリガー」で、その他アイコン→「トリガーを削除」。
出典: インストール可能なトリガー