Anexos no Google Apps Script

Jan 06 2021

Estou tendo problemas quando coloco mais de um anexo no Google Apps Script para enviar por e-mail.

A parte do código que faz isso é

      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]

    });

Mas quando eu executo isso, tenho este problema:

Exceção: argumento inválido: anexos (linha 151, arquivo "Email")

Tenho um arquivo .doc1 que é preenchido e depois convertido para PDF e outro arquivo2 que já é um PDF.

Quando executo apenas com o arquivo1, posso enviar o e-mail, mas quando tento com o arquivo1 e o arquivo2, recebo este erro. Alguém pode saber o que pode estar acontecendo?

Eu corro várias outras sugestões que li aqui na pilha, mas nenhuma funcionou.

Respostas

1 Marios Jan 06 2021 at 23:09

Explicação:

O problema é que file2 não é do tipo FILE, mas sim um objeto da classe FileIterator .

Por outro lado, file1 é do tipo FILE e é por isso que está funcionando corretamente.

Também é uma boa prática verificar se o nome do arquivo existe antes de enviar o e-mail.

Solução:

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

Referências:

  • getFilesByName (name)
  • createFile