Gmail に届くメールを Google App Script で一定期間後に削除する

概要

  • ずいぶん昔にGmailの整理をしたときに設定したGASを、友人に共有するために記事化
  • フィルタリング→ラベル付けしたもののうち、特定のラベルが付いたものは一定期間が経過したら自動で削除されるようにする
  • フィルタ設定についての詳細は割愛する

参考エントリー

手順

GASの新規プロジェクトを追加

  1. Google App Script のページを開く
  2. 左上の [新しいプロジェクト] ボタンを押下
  3. 適当に名前をつける
    • 自分は auto delete email とした

スクリプトを作成

デフォルトで作成される コード.gs に以下をコピペし、内容を適宜書き換える。

  • delayDays:削除するタイミング
  • deleteLabel:対象のラベル

スター付きにしたものも削除する場合は -is:starred の記述を削除すればOK。

function autoDeleteEmail_magazine() {
  var delayDays = 8; //1週間経ったら消す
  var deleteLabel = "*メルマガ・クーポン";
  var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);

  for (var i = 0; i < deleteThreads.length; i++) {
    deleteThreads[i].moveToTrash();
  }
}

複数設定する場合は、関数をコピペで複製して別の名前に変更する。

トリガーを設定

追加方法
  1. サイドメニュー > トリガー に遷移
  2. 右下の [トリガーを追加] ボタンを押下
  3. 後述の設定項目を参考に、定義した関数ごとに設定
    • まとめたい場合は全部実行する関数を追加で作ってそれを呼び出せばいいと思う
    • ラベルごとに処理を切り分けたいのでやってない
トリガーの設定項目
  • 実行する関数
    • スクリプト側で定義した関数名を選択
  • デプロイ時に実行
    • プルダウン動かないのでそのままでOK
      • スクリプトをデプロイしていないので関係ない
  • イベントのソース
    • 時間主導型
  • 時間ベースのトリガーのタイプ
    • 以下から好きなものを選択
      • 特定の日時
        • 動作確認にはよいが、定期的に回すならNG
      • 分ベースのタイマー
        • 「実行間隔」を1分単位で設定できる
      • 時間ベースのタイマー
        • 「実行間隔」を1時間単位で設定できる
      • 日付ベースのタイマー
        • 「実行する時刻」を1時間単位で設定できる
      • 週ベースのタイマー
        • 「実行する曜日と時刻」を設定できる
      • 月ベースのタイマー
        • 「実行する日付と時刻」を設定できる
  • エラー通知設定
    • 以下から好きなものを選択
      • 今すぐ通知を受け取る
      • 1時間おきに通知を受け取る
      • 毎日通知を受け取る
      • 1週間おきに通知を受け取る

参考:自分の設定内容

Gmail 側の対象フィルタ

Gmail 画面のスクリーンショット(対象フィルタにマークをつけてある)

  • *メルマガ・クーポン ラベル
  • *通知 ラベルのうち、以下のサブラベル
    • *入荷・新刊e-honの新刊パトロール通知を振り分けてる(が、メール配信サービスが終わってしまった…)
    • *配送:ネットショップの出荷通知が入るように subject:(*発送*|*出荷*|*配達*) で振り分けてる
    • クレジット:利用通知や請求予告などを振り分けてる

スクリプト

function autoDeleteEmail_magazine() {
  var delayDays = 8; //1週間経ったら消す
  var deleteLabel = "*メルマガ・クーポン";
  var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);

  for (var i = 0; i < deleteThreads.length; i++) {
    deleteThreads[i].moveToTrash();
  }
}
function autoDeleteEmail_arrival() {
  var delayDays = 8; //1週間経ったら消す
  var deleteLabel = "*通知-*入荷・新刊";
  var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);

  for (var i = 0; i < deleteThreads.length; i++) {
    deleteThreads[i].moveToTrash();
  }
}
function autoDeleteEmail_delivery() {
  var delayDays = 15; //2週間経ったら消す
  var deleteLabel = "*通知-*配送";
  var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);

  for (var i = 0; i < deleteThreads.length; i++) {
    deleteThreads[i].moveToTrash();
  }
}
function autoDeleteEmail_credit() {
  var delayDays = 31; //1ヶ月経ったら消す
  var deleteLabel = "*通知-クレジット";
  var deleteThreads = GmailApp.search('older_than:'+delayDays+'d -is:starred label:'+ deleteLabel);

  for (var i = 0; i < deleteThreads.length; i++) {
    deleteThreads[i].moveToTrash();
  }
}

トリガー

トリガー一覧のスクリーンショット
トリガー設定詳細画面のスクリーンショット

項目 内容
実行する関数 スクリプト側で定義した関数名
デプロイ時に実行 Head
イベントのソース 時間主導型
時間ベースのトリガーのタイプ 日付ベースのタイマー
時刻を選択 午後12時~1時
エラー通知設定 毎日通知を受け取る

Comments

  • スパム対策のため、コメント本文にURLが含まれている場合は「承認待ち」となり、すぐに投稿が反映されません。ご了承ください。
  • 公序良俗に反する内容、個人が特定できる情報、スパム投稿と思われるコメント等については、予告なく編集・削除する場合があります。