1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZOZOAdvent Calendar 2023

Day 17

ラベルごとに仕分けしたメールをGoogle Apps Script(GAS)を用いて毎日自動でアーカイブ化する

Last updated at Posted at 2023-12-17

概要

使っているGmail宛に色々なメールが届いていますが,「すべての受信トレイ」をよく見る自分からすると,会社用メールとプライベートメールがごちゃまぜになるのは余り気分がよくありません.なので毎日会社用メール宛に届く似たようなメールはラベル付けを行ってGASで自動的にアーカイブ化するようにします.

ラベル付けとフィルタリング設定

Gmailの左下にあるラベルの「+」からラベルを作成できます.
label.jpg
そこから自分がメールのフィルタリングしたいラベルを作成します(例: AWS,GitHubなど)
次にGmailの設定から「フィルタとブロック中のアドレス」をクリックします.
filter_and_block_addresses.jpg

次にフィルタリング設定を行います.メールの宛先や件名から既存のメールをフィルタリングすることができます.
下記の画像では,Googleカレンダーをフィルタリングしたので「calendar」を含む設定にします.
image.png
次に「フィルタを作成」をクリックします.

メールが設定した条件に完全一致する場合に実行するものを選択できます.
image.png
今回の場合は以下を選択します.

  • 受信トレイをスキップ(アーカイブする)
  • ラベルを付ける: (作成したラベル)
  • 一致するスレッドにもフィルタを適用する.

上記で問題がなかったら「フィルタを作成する」をクリックすることでフィルタが作成されます.
作成したラベルをクリックすると,検索条件に基づいたメールがアーカイブ化されています.

新たに受信したメールをGASを用いて自動的にアーカイブ化

上記のやり方はすでに受信したメールをアーカイブ化することができますが,新たに受信したメールは手動でアーカイブ化するしかありません.それはやりたくないので,Google Apps Scripts(GAS)を用いて新たに受信したメールは1日後にアーカイブ化するようにします.

以下がコードになります.

function archiveLabelEmails() {
  // 昨日の日付と今日の日付を取得
  var yesterday = new Date();
  yesterday.setDate(yesterday.getDate() - 1);
  var today = new Date();
  
  // 昨日の日付と今日の日付をYYYY/MM/DD形式の文字列に変換
  var yesterdayString = Utilities.formatDate(yesterday, Session.getScriptTimeZone(), 'yyyy/MM/dd');
  var todayString = Utilities.formatDate(today, Session.getScriptTimeZone(), 'yyyy/MM/dd');

  // すべてのラベルを取得
  var labels = GmailApp.getUserLabels();
  // 各ラベルに対して処理を行う
  for (var i=0; i < labels.length; i++) {
    var label = labels[i];

    // ラベルが付与されているメールスレッドも取得
    // ラベルが付与され、日付が一致するメールを検索
    var searchQuery = 'label:' + label.getName() + ' after:' + yesterdayString + ' before:' + todayString;
    var threads = GmailApp.search(searchQuery);
    
    // 各スレッドをアーカイブ
    for (var j = 0; j < threads.length; j++) {
      threads[j].moveToArchive();  
    }
    Logger.log("Completed: " + label.getName());
  }
}

上記のコードをデプロイします.
次にトリガーを設定します.
自分の場合は毎日午前0字から1時の間に上記のコードを実行するようにしています.
image.png
上記を設定することで,新たに受信したメールでも,1日後にはメールをラベルごとにアーカイブ化することができます.

終わりに

基本的に毎日受信するメールは似たような内容のものが多いので,ラベル付けによるフィルタリングとGASをうまく利用することで本当に重要なメールを確認することができます.
本記事が参考になったら幸いです.

参考文献

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?