Отправка почты Gmail на диск в формате PDF с вложением - PullRequest
0 голосов
/ 20 февраля 2019

В настоящее время у меня есть следующий скрипт, который работал у нас некоторое время.Он был разработан для того, чтобы принимать электронные письма под определенным ярлыком, конвертировать их в pdf и хранить в папке на диске Google.Работает отлично.Проблема сейчас в том, что он хранит электронную почту и вложения в виде отдельных файлов.Мы пытаемся изменить его так, чтобы вложение сочеталось с сообщением, поэтому это просто один большой PDF-файл вместо нескольких файлов.

Процесс некоторое время выполнялся вручную, но нагрузка слишком велика.Я экспериментировал с различными кодами, но мне не повезло (я не большой кодер ...).

function saveEmailasPDF() { 
  
  var gmailLabels  = "Bill";  
  var driveFolder  = "Emails";
  
  var threads = GmailApp.search("in:" + gmailLabels, 0, 5);  
  
  if (threads.length > 0) {
    
    // Google Drive folder
    var folders = DriveApp.getFoldersByName(driveFolder);
    var folder = folders.hasNext() ? 
        folders.next() : DriveApp.createFolder(driveFolder);
    
    // Gmail Label
    var label = GmailApp.getUserLabelByName(gmailLabels) ?     
        GmailApp.getUserLabelByName(gmailLabels) : GmailApp.createLabel(driveFolder);
    
    for (var t=0; t<threads.length; t++) {
      
      threads[t].removeLabel(label);
      var msgs = threads[t].getMessages();
      
      var html = "";
      var attachments = [];
      
      var subject = threads[t].getFirstMessageSubject();
      
      // Combines the thread into an HTML document
      for (var m=0; m<msgs.length; m++) {
        
        var msg = msgs[m];
        
        html += "From: " + msg.getFrom() + "<br />";  
        html += "To: " + msg.getTo() + "<br />";
        html += "Date: " + msg.getDate() + "<br />";
        html += "Subject: " + msg.getSubject() + "<br />"; 
        html += "<hr />";
        html += msg.getBody().replace(/<img[^>]*>/g,"");
        html += "<hr />";
        
        var atts = msg.getAttachments();
        for (var a=0; a<atts.length; a++) {
          attachments.push(atts[a]);
        }
      }
      
      // Save the attachement to drive too and then add a link to the message pdf
      if (attachments.length > 0) {
        var footer = "<strong>Attachments:</strong><ul>";
        for (var z=0; z<attachments.length; z++) {
          var file = folder.createFile(attachments[z]);
          footer += "<li><a href='" + file.getUrl() + "'>" + file.getName() + "</a></li>";
        }
        html += footer + "</ul>";
      }
      
      // Converts the email to a pdf. All the conversation will be in one pdf not seperated
      var tempFile = DriveApp.createFile("temp.html", html, "text/html");
      folder.createFile(tempFile.getAs("application/pdf")).setName(subject + ".pdf");
      tempFile.setTrashed(true);
      
    }
  }
}  
...