File upload 谷歌脚本-驱动器的附件

File upload 谷歌脚本-驱动器的附件,file-upload,google-apps-script,email-attachments,gmail-api,File Upload,Google Apps Script,Email Attachments,Gmail Api,我有下面的代码,但我一直在努力让它正常工作,要么每次我运行它时它都会创建重复的文件夹,要么它不会上载附件而只是创建文件夹。。。由于newMail Uploads对象没有.hasnext()函数,我还遇到了一个错误 我想做的是,让这个脚本运行,它把附件放在一个与其标签相关的文件夹中——因此在下面的代码中,所有带有newMail标签的邮件都会放在一个文件夹中,但我想能够进一步扩展代码,以运行多个标签等,所以我想检查相关文件夹是否存在,如果不创建它们,如果它们存在,则应使用它们 -编辑,现在它只是从某

我有下面的代码,但我一直在努力让它正常工作,要么每次我运行它时它都会创建重复的文件夹,要么它不会上载附件而只是创建文件夹。。。由于newMail Uploads对象没有.hasnext()函数,我还遇到了一个错误

我想做的是,让这个脚本运行,它把附件放在一个与其标签相关的文件夹中——因此在下面的代码中,所有带有newMail标签的邮件都会放在一个文件夹中,但我想能够进一步扩展代码,以运行多个标签等,所以我想检查相关文件夹是否存在,如果不创建它们,如果它们存在,则应使用它们

-编辑,现在它只是从某个地址获取第一封电子邮件的附件

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

}
函数startProcess()
{
var gmailabels=“newLabel”;
var driveFolder=“newFolder”;
var archiveLabel=“已处理”;
var moveToLabel=GmailApp.getUserLabelByName(archiveLabel);
if(!moveToLabel)
{    
moveToLabel=GmailApp.createLabel(archiveLabel);
}
findFolder(Gmillabels、driveFolder、archiveLabel、moveToLabel);
}
函数findFolder(Gmillabels、driveFolder、archiveLabel、moveToLabel)
{
var filter=“has:附件标签:”+gmailabels;
var folder=DriveApp.getFoldersByName(driveFolder);
if(folder.hasNext()){
folder=folder.next();
}否则{
folder=DriveApp.createFolder(driveFolder);
}
调用线程(Gmillabels、driveFolder、archiveLabel、moveToLabel、filter、folder)
}
函数调用线程(Gmillabel、driveFolder、archiveLabel、moveToLabel、filter、folder)
{
var threads=GmailApp.search(过滤器);

对于(var x=0;x这只是一个建议。我还没有测试过这段代码,它可能不起作用。但这不是重点。我试图展示如何为代码创建一些顺序,以便更容易理解和调试:

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() {

};

看起来第一步是:如果你想要的文件夹不存在,那么就创建它。我会把它放在它自己的函数中。现在你有很多不同的进程都在一个函数中。嗨,你的逻辑似乎有点落后。你不应该循环你的邮件/电子邮件线程,然后进行文件处理和目录检查吗?我想问题是它没有区分一个线程和一条消息。我认为它将整个线程视为一条消息。但我不知道我们如何做到这一点?我想也许将其移动到垃圾箱,但这并不能解决任何问题,而且我找不到在移动后立即清除垃圾的方法。一个线程只是一个消息的集合消息。因此,当您调用
getMessages();
时,它将返回一个消息数组。但是,
线程[x].getMessages()[x]
您将在同一索引上继续调用它。因此对于线程[1](包含30条消息),您将返回该线程的第一条消息)。对于线程[2]您将接受该电子邮件线程中的第二封邮件。这是您想要的行为吗?您不也应该在一个线程中循环处理邮件吗?并调用
getAttachments()
在每封邮件上。然后对该附件进行验证和检查。感谢您的回复,我知道它有点凌乱,这有点沮丧。我已将其整理得更整洁了。目前,我遇到的问题是:它从以前的电子邮件上载附件(如果来自同一地址的地址超过1个)或者它什么也不做。