命名って難しい

変数、関数、クラスなどなど実装より命名に毎回悩むタイプの人間による技術や趣味についてのメモ。

Google App ScriptでGmailの受信ボックスを自動でアーカイブしちゃう

Outlookメールでは一括処理というものがあり、n日後に○○するというようなルールが設定できます。 しかしGmailではできないのでGoogle App Scriptで組む事にしました。

Gmail自体はラベル機能が便利すぎるのでOutlookをメインにはしたくないんですよね。

スクリプトの流れ

以下の流れで実装しています。 - 検索クエリを作る - 検索クエリでメールスレッドを取得する - 取得したメールスレッドをアーカイブする

これをトリガー登録して定時実行させるだけです。(GASの定時実行については省略します)

なお、検索クエリについては以下のメールは除外しています。

1.☆つき ウェブブラウザのGmail以外で見るときに、アーカイブさせたくないメールをマークするために使います。

例えば - iPhoneのメールアプリ - フラグをつける - Thunderbird(デスクトップアプリ) - ☆マークをクリック

2. 重要とマークされている

Gmailに設定しているルールで重要にしたものは自分でアーカイブしたいので。

スクリプト

function gmailAutoarchive() {
 
  // 固定値。検索クエリと何日前のメールをアーカイブするか。
  const SearchQueryFormat = 'in:inbox -is:starred -is:important older:%s';
  const DelayDays = 14;

  // 指定日数前のメールを検索するクエリ文字列を作る
  var maxDate = new Date();
  maxDate.setDate(maxDate.getDate() - DelayDays);
  var maxDateStr = Utilities.formatDate(maxDate, 'JST', 'YYYY-MM-dd');
  var query = Utilities.formatString(SearchQueryFormat, maxDateStr);
  
  // クエリでメール検索してアーカイブ
  var threads = GmailApp.search(query);
  for (var i = 0; i < threads.length; i++) {
    threads[i].moveToArchive();
  }
  
}

注意点

受信ボックスのメールが多いと getInboxThreads がエラーになるようなので注意。その場合はページングをする必要があります。

参考リンク

クエリ作る support.google.com

日付のテキスト化 developers.google.com

メールを取得 developers.google.com

以上!