Google-скрипт поиска GmailApp для метки или ноузера - PullRequest
2 голосов
/ 14 октября 2019

Я пытаюсь создать скрипт, который позволит мне искать электронные письма и их вложения по имени метки или без метки пользователя. Если в searchForLabels более одной записи, скрипт не работает.

function searchLabels(){

  //if there is more than one entry here, the script does not work
  var searchForLabels = 
      [
        'has:nouserlabels',
        'label:Test1'
      ];

  for (var l = 0; l < searchForLabels.length; l++) {

    var threads = GmailApp.search('in:inbox newer_than:4d' + searchForLabels);  
    var msgs = GmailApp.getMessagesForThreads(threads);
    Logger.log(searchForLabels)

    if (searchForLabels == 'has:nouserlabels'){    
      for (var i = 0 ; i < msgs.length; i++) {
        for (var j = 0; j < msgs[i].length; j++) {
          var message = msgs[i][j];
          var from = message.getFrom();
          var subject = message.getSubject();
          var getAttachments = message.getAttachments();
          var body = message.getPlainBody();
          var getTo = message.getTo();
          Logger.log(subject)

          for (var k = 0; k < getAttachments.length; k++) {
            var attachment = getAttachments[k];
            var content = attachment.getContentType();

            //rest of my code
          } 
        }      
      }
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2019
function searchLabels() {
  var searchForLabels = [
    'has:nouserlabels',
    'label:Test1'
  ];
  for (var l = 0; l < searchForLabels.length; l++) {
    var threads = GmailApp.search('in:inbox newer_than:4d ' + searchForLabels[l]);
    var msgs = GmailApp.getMessagesForThreads(threads);
    Logger.log(searchForLabels)
    if (searchForLabels[l] == 'has:nouserlabels') { //limits emails to those without tag
    //if (searchForLabels[l] == 'label:Test1') { //or to those with tag
      for (var i = 0; i < msgs.length; i++) {
        for (var j = 0; j < msgs[i].length; j++) {
          var message = msgs[i][j];
          var from = message.getFrom();
          var subject = message.getSubject();
          var getAttachments = message.getAttachments();
          var body = message.getPlainBody();
          var getTo = message.getTo();
          Logger.log(subject)
          for (var k = 0; k < getAttachments.length; k++) {
            var attachment = getAttachments[k];
            var content = attachment.getContentType();
            //rest of my code
          }
        }
      }
    }
  }
}
0 голосов
/ 15 октября 2019

Я сделал два небольших изменения в вашем коде. После тестирования он работает так, как вы просили.

Первый находится в строке var threads = GmailApp.search('in:inbox newer_than:4d ' + searchForLabels[l]);. Я использовал итератор l в массиве searchForLabels. Я использовал его, потому что, читая контекст строки, это кажется уместным. Это изменение будет перебирать теги. Прости меня, если это не было твоим первоначальным намерением.

Второе изменение требуется для работы скрипта. Я закомментировал if (searchForLabels == 'has:nouserlabels') {, потому что он никогда не будет true, если массив searchForLabels имеет более одного элемента. Это ошибка, которую вы обнаружили. Обратите внимание, как также комментируется корреспондент }.

Это окончательная и рабочая версия скрипта:

function searchLabels() {
  //if there is more than one entry here, the script does not work
  var searchForLabels = [
    'has:nouserlabels',
    'label:Test1'
  ];
  for (var l = 0; l < searchForLabels.length; l++) {
    var threads = GmailApp.search('in:inbox newer_than:4d ' + searchForLabels[l]);
    var msgs = GmailApp.getMessagesForThreads(threads);
    Logger.log(searchForLabels)
    //if (searchForLabels == 'has:nouserlabels') {
      for (var i = 0; i < msgs.length; i++) {
        for (var j = 0; j < msgs[i].length; j++) {
          var message = msgs[i][j];
          var from = message.getFrom();
          var subject = message.getSubject();
          var getAttachments = message.getAttachments();
          var body = message.getPlainBody();
          var getTo = message.getTo();
          Logger.log(subject)
          for (var k = 0; k < getAttachments.length; k++) {
            var attachment = getAttachments[k];
            var content = attachment.getContentType();
            //rest of my code
          }
        }
      }
    //}
  }
}

Я хочу добавить, что вы можете использовать Gmail API в скрипте приложений, чтобы выполнить ваш запрос простым способом. В частности, вы можете использовать Users.messages LIST , чтобы получить список всех писем с выбранными вами тегами. Там вы можете увидеть пример (нажмите на JavaScript), где функция готова выполнить поиск. Чтобы включить этот API, вы должны следовать руководству по активации расширенных услуг . Не стесняйтесь обращаться за дополнительными разъяснениями или любыми вопросами.

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