Załączniki w Google Apps Script
Mam problem, kiedy umieszczam więcej niż jeden załącznik w Google Apps Script, aby wysłać go w wiadomości e-mail.
Część kodu, która to robi, to
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]
});
Ale kiedy to uruchamiam, mam ten problem:
Wyjątek: nieprawidłowy argument: załączniki (wiersz 151, plik „E-mail”)
Mam plik .doc1, który jest wypełniany, a następnie konwertowany do formatu PDF, oraz inny plik2, który jest już plikiem PDF.
Kiedy uruchamiam tylko plik file1, mogę wysłać e-mail, ale kiedy próbuję z file1 i file2, pojawia się ten błąd. Czy ktoś może wiedzieć, co się dzieje?
Uruchomiłem wiele innych sugestii, które przeczytałem tutaj na stosie, ale żadna z nich nie zadziałała.
Odpowiedzi
Wyjaśnienie:
Problem polega na tym, że file2
nie jest to typ FILE, ale obiekt klasy FileIterator .
Z drugiej strony file1
jest typu PLIK i dlatego działa poprawnie.
Dobrą praktyką jest również sprawdzenie, czy nazwa pliku istnieje przed wysłaniem wiadomości e-mail.
Rozwiązanie:
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)
]
})};
}
Bibliografia:
- getFilesByName (nazwa)
- createFile