Google AppsScriptの添付ファイル

Jan 06 2021

Google Apps Scriptに複数の添付ファイルを入れて電子メールで送信すると、問題が発生します。

これを行うコードの部分は

      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]

    });

しかし、これを実行すると、次の問題が発生します。

例外:無効な引数:添付ファイル(151行目、ファイル「Eメール」)

.doc file1が入力されてからPDFに変換され、別のfile2がすでにPDFになっています。

file1だけで実行するとメールを送信できますが、file1とfile2で実行するとこのエラーが発生します。誰かが何が起こっているのか知っていますか?

私はここでスタックで読んだ別の提案をたくさん実行しましたが、誰もうまくいきませんでした。

回答

1 Marios Jan 06 2021 at 23:09

説明:

問題はそれでfile2 はないタイプのFILEが、オブジェクトのFileIteratorのクラス。

一方、file1 FILEタイプであり、これが正しく機能している理由です。

電子メールを送信する前に、ファイル名が存在するかどうかを確認することもお勧めします。

解決:

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

参照:

  • getFilesByName(name)
  • createFile