Автоматическое перемещение / применение ярлыка к Gmail с помощью скрипта Google Apps - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь создать автоматический сценарий архивирования для моего почтового ящика G Suite.

Скрипт содержит поисковый запрос, который затем должен взять все найденные результаты, удалить из папки «Входящие» и добавить к нему пользовательский ярлык (архив).

Я борюсь с частью addLabel. Он выдает ошибку InternalError: Cannot find method addLabel(string)., но когда я проверяю документацию, мне кажется, что это правильный метод для правильного объекта.

Любая помощь будет оценена.

Автоматическое архивирование Gmail

var ARCHIVE_LABEL = "archived";    
var AUTO_ARCHIVE_AFTER = "30";

function Intialize() {
  return;
}

function Install() {

  ScriptApp.newTrigger("autoArchive")
           .timeBased()
           .at(new Date((new Date()).getTime() + 1000*60*2))
           .create();

  ScriptApp.newTrigger("autoArchive")
           .timeBased().everyDays(1).create();

}

function Uninstall() {

  var triggers = ScriptApp.getScriptTriggers();
  for (var i=0; i<triggers.length; i++) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

}

function autoArchive() {

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

  var auto  = Utilities.formatDate(age, Session.getScriptTimeZone(), "yyyy-MM-dd");
  var search = "in:inbox is:read before:" + auto;

  try {

    var threads = GmailApp.search(search, 0, 100);
    console.log("Found total:", threads.length); //This gives me 100 for the debug/test run which matches the result I should be getting


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

    for (var i=0; i<threads.length; i++) {
      if(threads[i].isInInbox()){
        console.log("So far so good. Let's add label")
        threads[i].addLabel('archived'); // This throws back the error **InternalError: Cannot find method addLabel(string).**
      }
    }

  } catch (e) {
    console.log('Error');
    console.log(e);
  }

}

1 Ответ

0 голосов
/ 11 января 2019

Как насчет этой модификации?

Очки модификации:

  • Тип label из addLabel(label) равен GmailLabel.
    • В вашей ситуации вы можете использовать метод getUserLabelByName().

Модифицированный скрипт:

Пожалуйста, измените следующим образом.

От:
for (var i=0; i<threads.length; i++) {
  if(threads[i].isInInbox()){
    console.log("So far so good. Let's add label")
    threads[i].addLabel('archived'); // This throws back the error **InternalError: Cannot find method addLabel(string).**
  }
}
Для того, чтобы:
var label = GmailApp.getUserLabelByName("archived"); // Added
for (var i=0; i<threads.length; i++) {
  if(threads[i].isInInbox()){
    console.log("So far so good. Let's add label")
    threads[i].addLabel(label); // Modified
  }
}

Примечание:

  • Если вы хотите присвоить новый ярлык, пожалуйста, создайте ярлык перед запуском скрипта. Конечно, вы можете создать новую метку, используя скрипт. В то время, пожалуйста, используйте метод createLabel() в качестве комментария @ Cooper .

Ссылки

Если я неправильно понял ваш вопрос, пожалуйста, скажите мне. Я хотел бы изменить его.

...