Через несколько дней окончательно удалить сообщение Gmail - PullRequest
0 голосов
/ 25 мая 2020

Я использую этот скрипт для удаления старых сообщений из Gmail каждые X дней. Он работает правильно, однако сообщения отправляются на tra sh. Я хочу удалить сообщения навсегда, не отправляя их на tra sh. Кто-нибудь может изменить этот скрипт?

// The name of the Gmail Label that is to be autopurged?
var GMAIL_LABEL = "mylabel";    

// Purge messages automatically after how many days?
var PURGE_AFTER = "21";

function purgeGmail() {

  var age = new Date();  
  age.setDate(age.getDate() - PURGE_AFTER);    

  var purge  = Utilities.formatDate(age, Session.getTimeZone(), "yyyy-MM-dd");
  var search = "label:" + GMAIL_LABEL + " before:" + purge;

  // This will create a simple Gmail search 
  // query like label:Newsletters before:10/12/2012

  try {

    // We are processing 100 messages in a batch to prevent script errors.
    // Else it may throw Exceed Maximum Execution Time exception in Apps Script

    var threads = GmailApp.search(search, 0, 100);


    // For large batches, create another time-based trigger that will
    // activate the auto-purge process after 'n' minutes.

//    if (threads.length == 100) {
//      ScriptApp.newTrigger("purgeGmail")
//               .timeBased()
//               .at(new Date((new Date()).getTime() + 1000*60*10))
//               .create();
//    }

    // An email thread may have multiple messages and the timestamp of 
    // individual messages can be different.

    for (var i=0; i<threads.length; i++) {
      var messages = GmailApp.getMessagesForThread(threads[i]);
      for (var j=0; j<messages.length; j++) {
        var email = messages[j];       
        if (email.getDate() < age) {
          email.moveToTrash();
        }
      }
    }

  // If the script fails for some reason or catches an exception, 
  // it will simply defer auto-purge until the next day.
  } catch (e) {}

}

спасибо

1 Ответ

1 голос
/ 25 мая 2020

Это довольно просто, все, что вам нужно сделать, это получить все идентификаторы сообщений в массиве, а затем использовать следующие две строки.

var request={"ids":messageIdArray};
Gmail.Users.Messages.batchDelete(request, "me");

Вам нужно будет включить Advanced Gmail API

batchDelete

Итак, если остальная часть вашего кода действительно работает, это должно сработать:

var GMAIL_LABEL = "mylabel";    
var PURGE_AFTER = "21";
function purgeGmail() {
  var age = new Date();  
  age.setDate(age.getDate() - PURGE_AFTER);    
  var purge  = Utilities.formatDate(age, Session.getTimeZone(), "yyyy-MM-dd");
  var search = "label:" + GMAIL_LABEL + " before:" + purge;
  try {
    var msgA=[];
    for (var i=0; i<threads.length; i++) {
      var messages = GmailApp.getMessagesForThread(threads[i]);
      for (var j=0; j<messages.length; j++) {
        var email = messages[j];       
        if (email.getDate() < age) {
          msgA.push(email.getId());  
        }
      }
    }

  } catch (e) {}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...