Google脚本 - 驱动器附件

时间:2015-05-09 08:34:44

标签: file-upload google-apps-script email-attachments gmail-api

我有下面的代码,但我一直在努力让它正常工作,无论是每次运行它都会创建重复的文件夹,或者它没有上传附件只是创建文件夹...由于newMail Uploads对象没有.hasnext()函数,我也收到错误。

我想要做的是运行此脚本并将附件放在与其标签相关的文件夹中 - 所以在下面的代码中,所有带有newMail标签的邮件都会转到单个文件夹,但我想要能够进一步扩展代码以运行多个标签ect,所以我想检查相关文件夹是否存在,如果不存在,如果它们存在则应该使用它们。

-Edit,现在只收到来自某个地址的第一封电子邮件的附件。

    function startProcess()
{
  var gmailLabels  = "newLabel";  
  var driveFolder  = "newFolder";  
  var archiveLabel = "Processed";
  var moveToLabel =  GmailApp.getUserLabelByName(archiveLabel);

   if ( ! moveToLabel )
   {    
    moveToLabel = GmailApp.createLabel(archiveLabel);    
   }

  findFolder(gmailLabels, driveFolder, archiveLabel, moveToLabel);

}

function findFolder(gmailLabels, driveFolder, archiveLabel, moveToLabel)
{
  var filter = "has:attachment label:" + gmailLabels; 


  var folder = DriveApp.getFoldersByName(driveFolder);

  if (folder.hasNext()) {
    folder = folder.next();
  } else {
    folder = DriveApp.createFolder(driveFolder);
  }

  callThreads(gmailLabels, driveFolder, archiveLabel, moveToLabel, filter, folder)

}

function callThreads(gmailLabels, driveFolder, archiveLabel, moveToLabel, filter, folder)
{
  var threads = GmailApp.search(filter); 
for (var x=0; x<threads.length; x++) {
    var label = GmailApp.getUserLabelByName(gmailLabels);
    var message = threads[x].getMessages()[x];

    var desc   = message.getSubject() + " #" + message.getId();
    var att    = message.getAttachments();

    for (var z=0; z<att.length; z++) {
      try {
        file = folder.createFile(att[z]);
        file.setDescription(desc);
      }
      catch (e) {
        Logger.log(e.toString());
      }
    }

    //threads[x].addLabel(moveToLabel); 
    label.removeFromThreads(threads);
    //threads[x].moveToTrash();
  }

}

1 个答案:

答案 0 :(得分:0)

这只是一个建议。我还没有测试过这段代码,它可能不起作用。但那不是重点。我试图说明如何为代码创建一些订单,以便更容易理解和调试:

function sendToGoogleDrive() {
  makeNewFolders();
  putEmailsIntoFolders();
};


function makeNewFolders() {
  var gmailLabels  = "newMail";  
  var driveFolder  = "newMail";  
  var archiveLabel = "Processed";

  var rootUploadFolders ="newMail Uploads";
  var rootDriveFolder = DriveApp.getFolders();
  var rootExist = false;
  var childExist = false;

  while (rootDriveFolder.hasNext()) {
    var folder = rootDriveFolder.next();
    if(folder.getName()==rootUploadFolders) {
      var folderId = folder.getId();

      if(folder.getName()!==driveFolder) {
        var child = DriveApp.getFolderById(folderId).createFolder(driveFolder);
      };

    };
  };
};

function putEmailsIntoFolders() {

};