Скрипт Google Apps Почему он ищет только одно (первое) вложение - PullRequest
1 голос
/ 25 октября 2019

У меня есть два кода, первый из которых работает и показывает все вложения, а второй показывает только первый. «getAttachmentAndMessage» используется несколькими моими сценариями, поэтому мне нужно иметь его в отдельной функции, чтобы не дублировать мою конфигурацию. Пожалуйста, помогите.

//this function get me all attachments
//this function is just an example of how I built my code below; 
function searchEmailsData(){
  var search = GmailApp.search('in:inbox newer_than:3d');
  var threads = GmailApp.getMessagesForThreads(search);
  for (var i = 0 ; i < threads.length; i++) {
    var thread = threads[i];

    for (var j = 0; j < thread.length; j++) {
      var message = thread[j];
      var attachments = message.getAttachments();

      for (var k = 0; k < attachments.length; k++) {        
        var attachment = attachments[k];
        Logger.log(attachment.getName());
      }
    }
  }
}

//this functions get me only first attachment but I need all of them;
function searchEmailsData2(){
  var search = GmailApp.search('in:inbox newer_than:3d');
  var threads = GmailApp.getMessagesForThreads(search);
  for (var i = 0 ; i < threads.length; i++) {
    var thread = threads[i];    
    var obj = getAttachmentAndMessage(thread);    
    Logger.log(obj[1].getName())
  }
}

function getAttachmentAndMessage(thread){ 

  for (var j = 0; j < thread.length; j++) {
    var message = thread[j];

    var attachments = message.getAttachments();

    for (var k = 0; k < attachments.length; k++) {
      var attachment = attachments[k];
      var obj = [message, attachment];

      return obj;     
    }
  }
}

1 Ответ

0 голосов
/ 25 октября 2019

Чтобы вернуть не первое вложение, а скорее все из них, вы можете изменить функцию getAttachmentAndMessage() следующим образом:

function getAttachmentAndMessage(thread) { 
  var results = [];

  for (var j = 0; j < thread.length; j++) {
    var message = thread[j];
    var attachments = message.getAttachments();

    var obj = {'message': message, 'attachments': attachments};
    results.push(obj);
  }

  return results;
}

Выше будет возвращен список объектов, в котором каждый объектсодержит свойство message и свойство attachments (которое представляет собой список вложений).

Чтобы вернуть список, содержащий только вложений в ветке, вы можетеиспользуйте следующий вариант кода выше:

function getAttachmentAndMessage(thread) { 
  var results = [];

  for (var j = 0; j < thread.length; j++) {
    var message = thread[j];
    var attachments = message.getAttachments();

    results = results.concat(attachments);
  }

  return results;
}

Ваш оригинальный код

В своем исходном коде getAttachmentAndMessage() вы использовали оператор return внутри цикла for. Это означает, что при нахождении первого сообщения (первая итерация внешнего цикла) и при обнаружении его первого вложения (первая итерация внутреннего цикла) функция просто возвращает одно значение, которое представляет собой список, содержащий первое сообщение и его первое вложение.

...