Załączniki w Google Apps Script

Jan 06 2021

Mam problem, kiedy umieszczam więcej niż jeden załącznik w Google Apps Script, aby wysłać go w wiadomości e-mail.

Część kodu, która to robi, to

      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]

    });

Ale kiedy to uruchamiam, mam ten problem:

Wyjątek: nieprawidłowy argument: załączniki (wiersz 151, plik „E-mail”)

Mam plik .doc1, który jest wypełniany, a następnie konwertowany do formatu PDF, oraz inny plik2, który jest już plikiem PDF.

Kiedy uruchamiam tylko plik file1, mogę wysłać e-mail, ale kiedy próbuję z file1 i file2, pojawia się ten błąd. Czy ktoś może wiedzieć, co się dzieje?

Uruchomiłem wiele innych sugestii, które przeczytałem tutaj na stosie, ale żadna z nich nie zadziałała.

Odpowiedzi

1 Marios Jan 06 2021 at 23:09

Wyjaśnienie:

Problem polega na tym, że file2 nie jest to typ FILE, ale obiekt klasy FileIterator .

Z drugiej strony file1 jest typu PLIK i dlatego działa poprawnie.

Dobrą praktyką jest również sprawdzenie, czy nazwa pliku istnieje przed wysłaniem wiadomości e-mail.

Rozwiązanie:

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)
          ]    
  })};  
}

Bibliografia:

  • getFilesByName (nazwa)
  • createFile