Anexos no Google Apps Script
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
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