2017-11-28 2 views
0

Ich listet alle PDF-Dateien eines Ordners auf und sende sie in einer E-Mail. Das Problem ist, dass ich nicht weiß, wie mehrere Dateien anhängen.Mehrere dynamische Anhänge zu E-Mail hinzufügen

Dies ist, was ich bisher versucht habe: Dateien in Blob setzen und dann übergeben. Andere Versuche sollten Blob [0] und Blob 1 setzen, wenn es 2 pdf-Dateien gibt, aber es funktioniert nicht.

var folders = DriveApp.getFoldersByName(folderToScan); 
    var folder = folders.next(); 
    var contents = folder.getFiles(); 

    var blob = []; 
    var filesTextList = ""; 

    // foreach file 
    for(var counter = 0;contents.hasNext();counter++) 
    { 
    file = contents.next(); 

    var MimeType = file.getMimeType(); 

    // filter PDF 
    if(file.getMimeType() == "application/pdf") 
     { 
     blob[counter] = file.getBlob(); 
     // add file name to text 
     filesTextList += "\n" + file.getName(); 
    } 
    } 

    MailApp.sendEmail(sender, subject, message, 
    {attachments: blob} 
); 

Wenn ich nur 1 Blob-Datei, {Anhänge: blob [0]} funktioniert, aber es ist an der Zeile der E-Mail nicht dynamisch

Hier ist der Debugger ist: debugger

Antwort

1

Der attachments Parameter von sendEmail method nimmt "ein Array von Dateien zum Senden mit der E-Mail". Sie können Dateiobjekte sein, Sie müssen keine Blobs von ihnen bekommen.

Noch wichtiger ist, Ihre Schleife wird ein Array mit undefinierten Elementen erstellen, weil blob[counter] nur zugewiesen wird, wenn die Datei eine PDF ist, aber der Wert counter steigt unabhängig davon. Ich denke nicht, dass sendEmail darüber glücklich sein wird.

Verwenden Sie while Schleife mit Iteratoren und push Methode zum Hinzufügen von Elementen zu einem Array. Ein komplettes Beispiel.

function emailatt() { 
    var contents = DriveApp.getFolderById("id here").getFiles(); 
    var attachments = []; 
    while (contents.hasNext()) { 
    var file = contents.next(); 
    if (file.getMimeType() == "application/pdf") { 
     attachments.push(file); 
    } 
    } 
    MailApp.sendEmail("[email protected]", "subject", "body", {attachments: attachments}); 
} 

Beiseite: Ordner per ID abrufen ist am besten, wenn Sie wissen, welchen Ordner Sie möchten. Die Verwendung von getFoldersByName und dann die Auswahl eines Ordners mit diesem Namen war ein weniger robuster Ansatz.

+0

Klar wie Wasser. Ich hatte 1 Datei, die nicht PDF war, also hat ein Element keinen Blob, wie Sie sagten. Also ist nicht gefragt wie du gesagt hast. Vielen Dank!!! – clement