Вложения в скрипте Google Apps

Jan 06 2021

У меня возникают проблемы, когда я помещаю несколько вложений в скрипт Google Apps для отправки по электронной почте.

Часть кода, которая это делает,

      reportPDF = doc.getAs('application/pdf')
      reportPDF.setName('Attachment1 - '+ rows[0][0] + ".pdf");
      
      var file1 = destinationFolder.createFile(reportPDF);  
      var file2 = DriveApp.getFilesByName("test.pdf");

      DriveApp.getFileById(doc.getId()).setTrashed(true);
      
      emails.forEach(function(email) {
      MailApp.sendEmail(email, "Attachments  - " + rows[0][0], "Hello!", {
                        name: 'Good Practices',
                        attachments: [file.getAs(MimeType.PDF), file2]

    });

Но когда я запускаю это, у меня возникает такая проблема:

Исключение: недопустимый аргумент: вложения (строка 151, файл «Электронная почта»).

У меня есть файл .doc1, который заполняется, а затем конвертируется в PDF, и другой файл2, который уже является PDF.

Когда я запускаю только файл file1, я могу отправить электронное письмо, но когда я пытаюсь использовать file1 и file2, у меня возникает эта ошибка. Может кто знает, что может происходить?

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

Ответы

1 Marios Jan 06 2021 at 23:09

Объяснение:

Проблема в том, что file2 это не тип FILE, а объект класса FileIterator .

С другой стороны, он file1 относится к типу FILE и поэтому работает правильно.

Также рекомендуется перед отправкой электронного письма проверить, существует ли имя файла.

Решение:

function myFunction() {
  
  reportPDF = doc.getAs('application/pdf')
  reportPDF.setName('Attachment1 - '+ rows[0][0] + ".pdf");

  var file1 = destinationFolder.createFile(reportPDF);  // this is a file
  var folder = DriveApp.getFolderById(folderId); // put here the id of the folder
  var file2 = folder.getFilesByName("test.pdf"); // this is a file iterator

  DriveApp.getFileById(doc.getId()).setTrashed(true);
  
  if (file2.hasNext() ) {
      MailApp.sendEmail(emailAddress, "Attachments  - " + rows[0][0], "Hello!",{
      name: 'Good Practices',                  
      attachments: 
          [
           file1.getAs(MimeType.PDF),
           file2.next().getAs(MimeType.PDF)
          ]    
  })};  
}

Рекомендации:

  • getFilesByName (имя)
  • createFile