GmailのスパムメールをGASで定期削除

GmailのスパムメールをGASで定期削除

記事
IT・テクノロジー
GmailのスパムメールをGASで定期削除


■ はじめに:スパムメール問題とGASおじの提案

こんにちは、GASおじです。中小企業の経営者やフリーランスの皆さん、Gmailのスパムメールって毎日たまっていくから地味に面倒ですよね。手動で削除するのも時間のムダ。そこで今回は、Google Apps Script(以下GAS)を使ってスパムメールを定期的に「削除」…ではなく、安全に「アーカイブ」しつつログをバックアップする方法を紹介します。

重要なのは、既存のメールをいきなり完全削除しないこと。誤削除リスクを避けて、バックアップも残す堅実な運用を目指します。GASはGoogleアカウントの利用枠内で使えるので、追加の専用SaaS料金は不要。ただしquotaや実行時間制限はありますので使い方には注意が必要です。


■ スパムメール処理の考え方と初期設定


□ なぜ完全削除NG?

GmailのAPIやGASにはメールを完全に削除するAPIもありますが、誤って必要なメールまで消してしまうリスクが高くなります。そこで今回は、スパムメールを「スパムラベルのまま移動」ではなく「新規に日時付きのスプレッドシートに記録」し、アーカイブ(既読化)して受信トレイから見えなくする方法を採用します。


□ 必要な権限

・Gmailの読み取りとラベル操作権限
・Googleスプレッドシートの作成・編集権限
GASのプロジェクトでこれらの権限を付与してください。


□ Installable Trigger(時間主導型トリガー)

定期的にスクリプトを実行したいので、GASの「時間主導型トリガー」を設定します。例えば1日1回や2時間に1回など、ビジネスの運用に合わせて設定してください。


■ コード例:スパムメールのログとアーカイブ処理

以下はスパムメールの件名・送信者・受信日時を新しい日時付きスプレッドシートに書き出し、スパムメールを既読化するサンプルコードです。既存メールの削除や移動は行わず、記録と状態変更だけで安全に運用します。

function cleanSpamMails() {
const now = new Date();
const formattedDate = Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const sheetName = 'SpamLog_' + formattedDate;

// 新規スプレッドシートを作成
const ss = SpreadsheetApp.create(sheetName);
const sheet = ss.getActiveSheet();

// ヘッダー設定
sheet.appendRow(['件名', '送信者', '受信日時', 'スレッドID']);

// スパムラベルの取得
const spamLabel = GmailApp.getUserLabelByName('SPAM') || GmailApp.getSpamLabel();

if (!spamLabel) {
Logger.log('スパムラベルが見つかりません。');
return;
}

// スパムスレッドを取得(最大100件まで)
const spamThreads = spamLabel.getThreads(0, 100);

spamThreads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
const subject = message.getSubject();
const from = message.getFrom();
const date = message.getDate();
sheet.appendRow([subject, from, Utilities.formatDate(date, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm:ss'), thread.getId()]);

// メールを既読化(アーカイブ相当)
if (!message.isRead()) {
message.markRead();
}
});
});

Logger.log(`スパムメール${spamThreads.length}スレッド分の情報をスプレッドシートに記録しました。`);
}


■ コードのポイント解説と運用上の注意点

・新規スプレッドシート作成既存のシートを上書きしないため、毎回日時付きの新しいスプレッドシートを作成しています。これでバックアップ・ログ管理が可能。
・スパムラベルの取得Gmail標準のSPAMラベルを利用しています。環境によってはカスタムラベル名に変更してください。
・削除APIは使わないメールを完全削除するAPIは使わず、代わりに既読化だけ行います。これで誤削除リスクを回避。
・Batch処理の工夫Gmailのスレッド取得は最大100件までに制限し、quota超過を防止。必要に応じて分割実行してください。
・quotaと実行時間Apps Scriptの実行時間は最大6分、Gmail APIの読み取り制限もあります。大量のスパムがある場合は実行間隔や件数制限を調整しましょう。


■ 導入後のコスト削減イメージ

Gmailの不要なスパムメールはストレージ容量を圧迫し、大量の保存容量によりGoogle Workspaceのプランアップグレードが必要になるケースもあります。例えば、

・スパムメールの平均サイズを1通あたり100KB
・月間スパム受信数を1000通と仮定
・1年で約12MBの不要容量増加
これをGASで定期的にアーカイブ&ログ管理し、手動削除の工数削減やストレージ増加によるSaaSプランアップグレード回避を目指せます。※あくまでも仮定の計算であり、環境により異なります。


□ 初期設定まとめ

・GASプロジェクトを作成し、上記コードをコピペ
・Gmailとスプレッドシートの権限を付与
・「トリガー」画面から時間主導型トリガーを設定(例:毎日午前3時)
・スクリプト実行で新規スプレッドシートにログが作成されるか確認


□ 個人情報の取り扱い

スパムメールの情報はログとしてスプレッドシートに保存されます。機密情報が含まれる可能性があるため、共有設定は慎重に行ってください。


□ 復元手順

完全削除は行わない運用のため、万が一の復元はGmailの通常のスパムフォルダやGmailのゴミ箱から手動復元が可能です。

■ GASの相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す