<スポンサーリンク>

gmailの(受信数の多い)不要メールを一括削除するプログラム

GAS
この記事は約8分で読めます。
コピーボタン
記事のタイトルとURLをコピー

今までどれだけ無駄使いしてきたかな~。。

ということで、今回は「GMAILの不要なメール」を検索するプログラムを作成しましたので、
展開していきたいと思います!

スポンサーリンク

gmailの不要メールを一括削除(検索)するプログラム

<スポンサーリンク>

gmailの容量が10GBを超えてきて、さすがに、過去のメール、いらないメールを消していかないといけないな。

ということで、

gmailの不要メールを一括で検索⇒削除するプログラムを作成しました!

これのおかげで5GBまでとりあえず減らすことが出来ましたので、皆様も一度お試しください。

どんなことが出来るの?

できることは、

プログラム①

・受信数の多い受信先の一覧を作成

プログラム②

・受信先一覧より、不要なメールを削除

と、いう流れになります。

実際には、

プログラム①で、
・上位3000件のスレッドを検索 、受信数の多い順に並び替える

手作業で、
・消したいメールのフラグを設定

プログラム②で、
・一括削除

という流れになります。

また、いつからのメールを検索するかを設定することもできます。

出来ること

下記の通り、

検索対象の日付より前のメールを3000件並べ、
受信数の多い順番で、アドレスを並び替えます。

これで、受信数の多いメルマガなどを判断することができます。

さらに、削除フラグを立てたアドレスのメールを削除していきます。

消す期間も選ぶことができます。

プログラム展開

実際のプログラムは下記のとおりです。

↓よりプログラムをコピーしてお使いください。

プログラムの実行には承認が必要です。
下記の通り、プログラムの承認をお願いいたします。

承認方法

実行を押す。

プログラムの承認を続行
アカウントを選択
左下の灰色の小さい「詳細」をクリック
○○(安全ではないページ)に移動をクリック
許可をクリック

プログラム紹介

プログラム①

MailRist で、3000件のメールを並べ
TYOFUKU で、重複を削除、多い順に並び替えています。


function myFunction2() {

  var book = SpreadsheetApp.getActiveSpreadsheet()
  var sheet1 = book.getSheetByName("メール確認")

  book.toast("対象メール検索中 ※少々時間がかかります。", "実行中", -1)

  const datebefore = Utilities.formatDate(sheet1.getRange(1, 3).getValue(), 'Asia/Tokyo', 'yyyy/MM/dd');

  dateA = MailRist(datebefore, 1)

  sheet1.getRange(1, 2).setValue(dateA);

  TYOFUKU

}


function TYOFUKU() {

  var book = SpreadsheetApp.getActiveSpreadsheet()
  var sheet1 = book.getSheetByName("メール確認")

  sheet1.getRange(3, 7, 5000, 1).setValues(sheet1.getRange(3, 2, 5000, 1).getValues());

  sheet1.getRange(3, 7, 5000, 1).removeDuplicates([7]);

  sheet1.getRange(3, 6, 5000, 3).sort({ column: 6, ascending: false });

}

function MailRist(datebefore, j) {

  var book = SpreadsheetApp.getActiveSpreadsheet()
  var sheet1 = book.getSheetByName("メール確認")

  book.toast((j - 1) * 500 + '~' + j * 500 + "対象メール検索中 ※少々時間がかかります。", "実行中", -1)

  var findkey = "before:" + datebefore
  var kensakukekka = GmailApp.search(findkey, 0, 500);
  var Msg = GmailApp.getMessagesForThreads(kensakukekka);//二次元配列

  var OutputMsg = [];
  var maxc = 0;

  book.toast("findkey", 5, 5)

  /* 各メールから日時、送信元、件名、内容を取り出す */
  for (var i = 0; i < Msg.length; i++) {


    var date2 = Msg[i][0].getDate();
    var from = Msg[i][0].getFrom();
    var subj = Msg[i][0].getSubject();
    /*var body = Msg[i][0].getBody().slice(0,100000);*/
    var perm = kensakukekka[i].getPermalink();

    var S_num = from.indexOf('<');
    var E_num = from.indexOf('>');

    var from2 = from.substring(S_num + 1, E_num);

    OutputMsg.unshift([from, from2, subj, perm])

  }

  date2.setDate(date2.getDate() - 1);
  datebefore = Utilities.formatDate(date2, 'Asia/Tokyo', 'yyyy/MM/dd');
  console.log('日付' + datebefore)



  for (var i = 0; i < OutputMsg.length; i++) {
    var cn = OutputMsg[i].length
    if (cn > maxc) { maxc = cn }
  }

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

  console.log(OutputMsg.length, j)

  if (Msg.length > 0) {
    var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール確認');
    mySheet.getRange(3 + 500 * (j - 1), 1, OutputMsg.length, maxc).setValues(OutputMsg);
    j = j + 1
    if (j === 8) {
      return date2;
    }
  }

  MailRist(datebefore, j)

  Browser.msgBox("完了")

}

プログラム②

フラグがたっているところのアドレスを消しています。

function deleteGmail() {

  var book = SpreadsheetApp.getActiveSpreadsheet()
  var sheet1 = book.getSheetByName("メール確認")

  const datebefore = Utilities.formatDate(sheet1.getRange(2, 12).getValue(), 'Asia/Tokyo', 'yyyy/MM/dd');

  var lastY = sheet1.getRange(sheet1.getMaxRows(), 10).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();

  console.log(lastY)

  for (var i = 3; i <= lastY; i++) {
    if (sheet1.getRange(i, 10).getValue() === 1) {
      var deleteAddress = sheet1.getRange(i, 7).getValue();
      var conditions = "before:" + datebefore + 'from:' + deleteAddress + ''
      var deleteThreads = GmailApp.search(conditions)
      Logger.log("メールは全部で " + deleteThreads.length + " 通です!")
      Logger.log("削除を開始します")
      // 検索したとき複数で返すのでそれをfor文でループで回しています。
      for (var j = 0; j < deleteThreads.length; j++) {
        // ここで削除しています
        deleteThreads[j].moveToTrash();
        //  book.toast(i + 1 + " 通目削除しました : " + "メールは全部で " + deleteThreads.length, deleteAddress, -1)
        //  Logger.log(i + 1 + " 通目削除しました : " + deleteThreads[i])
      }
      Logger.log(deleteThreads.length + " 通の削除を完了しました!")
    }
  }
}

まとめ

正直このプログラムを使うより、どんどん消していった方が効率がいいのですが、

「このアドレスから大量にメールが来てる!!」というのが分からないという状況でしたので、
このプログラムを作成しました。

ぜひ使ってみてください!!

コピーボタン
記事のタイトルとURLをコピー
GAS
スポンサーリンク
スポンサーリンク
nujonoaをフォローする

コメント欄

<スポンサーリンク>
タイトルとURLをコピーしました