LoginSignup
3
10

More than 5 years have passed since last update.

【GAS】Gmailで自動アーカイブや自動削除

Posted at

動機

毎回アーカイブするのが面倒なのでアーカイブと削除を自動化しました。大量に届くお知らせメールお前のことだ。

GAS

メール検索用の文字列作成→メール検索→ヒットしたのを削除ORアーカイブ
するだけです。

function cleanGmail() {
  const list = ['info@aaa.com',
                'noreply@bbb.com',
                'notification@ccc.com'];

  const addresses = list.reduce(function(pre, cur) {
    return pre + '(from:' + cur + ') OR ';
  },'') 

  const searchWord = 'before:' + makePreviousDate(2) + ' AND (' + addresses + ')'

  archiveMailBySearch(searchWord);//2日たったlist内にあるメールをアーカイブ
  deleteMailBySearch('from:info in:read'); //アドレスにinfoのつくアーカイブされたメールの削除
}

function archiveMailBySearch(searchWord) {
  const myThreads = GmailApp.search(searchWord);
  myThreads.map(function(thread) {
    thread.moveToArchive();
  });
}

function deleatMailBySearch(searchWord) {
  const myThreads = GmailApp.search(searchWord);
  myThreads.map(function(thread) {
    thread.moveToTrash();
  });
}

function makePreviousDate(n){
  var dt = new Date(Date.now() - 86400000 * n);
  var y = dt.getFullYear();
  var m = dt.getMonth()+1
  var d = dt.getDate()
  var result = y + "/" + m + "/" + d;
  return result;
}

コメント

  const list = ['info@aaa.com',
                'noreply@bbb.com',
                'notification@ccc.com'];

  const addresses = list.reduce(function(pre, cur) {
    return pre + '(from:' + cur + ') OR ';
  },'') 

  const searchWord = 'before:' + makePreviousDate(2) + ' AND (' + addresses + ')'

list内のメールアドレスで2日たったものをアーカイブします。これは一例で、好きに文字列を作ってください。何ならGmail設定からフィルタの作成で検索したものをそのまま貼り付けても良いかもしれません。

function archiveMailBySearch(searchWord) {
  const myThreads = GmailApp.search(searchWord);
  myThreads.map(function(thread) {
    thread.moveToArchive();
  });
}

function deleatMailBySearch(searchWord) {
  const myThreads = GmailApp.search(searchWord);
  myThreads.map(function(thread) {
    thread.moveToTrash();
  });
}

違うのは thread.moveToArchive()とthread.moveToTrash()だけ。高階関数でやりたいところ。

function makePreviousDate(n){
  var dt = new Date(Date.now() - 86400000 * n);
  var y = dt.getFullYear();
  var m = dt.getMonth()+1
  var d = dt.getDate()
  var result = y + "/" + m + "/" + d;
  return result;
}

n日前の日付を返します。4月1日なら3月30日をちゃんと返します。(たぶん)

あとがき

アーカイブされた中で星マークの無いものを削除したり、逆に特定のメールは誤って削除されても自動で復活するようなプログラムもこれの簡単な変更で出来ると思います。

他にしたいことがある方は以下を参照ください。GASGmailのリファレンスです。
Class GmailThread

3
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
10