Pièces jointes sur Google Apps Script

Jan 06 2021

J'ai un problème lorsque je mets plusieurs pièces jointes dans Google Apps Script à envoyer dans un e-mail.

La partie du code qui fait cela est

      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]

    });

Mais quand je lance ceci, j'ai ce problème:

Exception: argument non valide: pièces jointes (ligne 151, fichier "Email")

J'ai un fichier .doc1 qui est rempli puis converti en PDF et un autre fichier2 qui est déjà un PDF.

Lorsque je lance uniquement avec le fichier1, je peux envoyer l'e-mail, mais lorsque j'essaye avec le fichier1 et le fichier2, j'ai cette erreur. Quelqu'un peut-il savoir ce qui pourrait se passer?

Je lance beaucoup d'autres suggestions que j'ai lues ici dans la pile, mais aucune d'entre elles n'a fonctionné.

Réponses

1 Marios Jan 06 2021 at 23:09

Explication:

Le problème est qu'il file2 ne s'agit pas d'un type FILE mais d'un objet de la classe FileIterator .

D'autre part, file1 est de type FILE et c'est pourquoi il fonctionne correctement.

Il est également recommandé de vérifier si le nom de fichier existe avant d'envoyer l'e-mail.

Solution:

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

Les références:

  • getFilesByName (nom)
  • createFile