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で無理なく自動化する相談ができます。