Allegati su Google Apps Script

Jan 06 2021

Ho qualche problema quando inserisco più di un allegato in Google Apps Script da inviare in un'e-mail.

La parte del codice che lo fa è

      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]

    });

Ma quando lo eseguo, ho questo problema:

Eccezione: argomento non valido: allegati (riga 151, file "Email")

Ho un file .doc1 che viene compilato e poi convertito in PDF e un altro file2 che è già un PDF.

Quando eseguo solo con file1, posso inviare l'e-mail, ma quando provo con file1 e file2, ho questo errore. Qualcuno sa cosa potrebbe succedere?

Ho eseguito molti altri suggerimenti che ho letto qui in pila, ma nessuno di questi ha funzionato.

Risposte

1 Marios Jan 06 2021 at 23:09

Spiegazione:

Il problema è che file2 non è di un tipo FILE ma un oggetto della classe FileIterator .

D'altra parte, file1 è di un tipo FILE ed è per questo che funziona correttamente.

È anche una buona pratica controllare se il nome del file esiste prima di inviare l'email.

Soluzione:

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

Riferimenti:

  • getFilesByName (nome)
  • createFile