Archivos adjuntos en Google Apps Script

Jan 06 2021

Tengo un problema cuando coloco más de un archivo adjunto en Google Apps Script para enviarlo por correo electrónico.

La parte del código que hace esto es

      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]

    });

Pero cuando ejecuto esto, tengo este problema:

Excepción: argumento no válido: archivos adjuntos (línea 151, archivo "Correo electrónico")

Tengo un archivo .doc1 que se completa y luego se convierte a PDF y otro archivo2 que ya es PDF.

Cuando ejecuto solo con el archivo1, puedo enviar el correo electrónico, pero cuando intento con el archivo1 y el archivo2, tengo este error. ¿Alguien puede saber lo que podría estar pasando?

Ejecuto muchas otras sugerencias que leí aquí en la pila, pero ninguna funcionó.

Respuestas

1 Marios Jan 06 2021 at 23:09

Explicación:

El problema es que file2 no es de un tipo FILE sino un objeto de la clase FileIterator .

Por otro lado, file1 es de tipo FILE y por eso está funcionando correctamente.

También es una buena práctica comprobar si el nombre del archivo existe antes de enviar el correo electrónico.

Solución:

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

Referencias:

  • getFilesByName (nombre)
  • crea un archivo