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

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で安全にスパムメール対策を進め、時間とコストの無駄を減らす手助けになれば嬉しいです。
もっと便利なツールを使いたい方は、ぜひメンバーシップもチェックしてくださいね。