2014-12-01 50 views
0

我尝试将所有附件发送到我的Google云端硬盘帐户,但我在搜索GmailApp.search时遇到问题。GmailApp.search不会过滤标签

我在我家发送电子邮件每隔5分钟用相同的主题,并且每个邮件有附加文件,该文件名称的摄像机是在一天time.jpg

首先我觉得在搜索按标签那么在这个过程中,我会添加一个新标签来标记并不重复该消息,但我总是收到所有消息。

我试着测试很多方法,并总是收到标签处理的消息。

function() { 
    //All message of the camera have the label GoogleDrive 
    var threads = GmailApp.search("has:attachment -label:processed label:GoogleDrive", 0, 5); 
    var folder = getFolder(driveFolder); 

    for (var x=0; x<threads.length; x++) { 
    var message = threads[x].getMessages(); 

    for(var y=0; y<message.length; y++) { 
     var desc = message[y].getSubject() + " #" + message[y].getId(); 
     var att = message[y].getAttachments(); 


     for (var z=0; z<att.length; z++) { 
     try {   
      if (check) { 
      var name = att[z].getName(); 
      if (name.indexOf(".") != -1) { 
       var extn = name.substr(name.lastIndexOf(".")+1).toLowerCase(); 
       if (valid.indexOf(extn) != -1) { 
       file = folder.createFile(att[z]); 
       file.setDescription(desc); 
       } else { 
       Logger.log("Skipping " + name); 
       } 
      } 
      } else { 
      file = folder.createFile(att[z]); 
      file.setDescription(desc); 
      } 
     } 
     catch (e) { 
      Logger.log(e.toString()); 
     } 
     } 
    } 
    threads[x].addLabel(moveToLabel); //this variable is processed label 
    } 
} 

问候


我有这个功能。我使用ctrlq.org代码作为基础,只有我把主要功能。

现在我复制所有的脚本

function createFilter(label, archiveLabel) { 

    var filter = "has:attachment -label:" + archiveLabel + " label:" + label; 

    return filter; 

} 


function help() { 
    var html = HtmlService.createHtmlOutputFromFile('help') 
    .setTitle("Google Scripts Support") 
    .setWidth(400) 
    .setHeight(260); 
    var ss = SpreadsheetApp.getActive(); 
    ss.show(html); 
} 


function premium() { 
    var html = HtmlService.createHtmlOutput('Upgrade to the <a href="www.labnol.org/internet/send-gmail-to-google-drive/21236/#premium">premium edition of Send to Google Drive</a> and unlock new features. You can also opt for one-on-one support via email, Skype or Google Hangouts.') 
    .setTitle("Send to Google Drive Premium") 
    .setWidth(240) 
    .setHeight(100); 
    var ss = SpreadsheetApp.getActive(); 
    ss.show(html); 
} 


function sendToGoogleDrive() { 

    var sheet = SpreadsheetApp.getActiveSheet(); 

    var gmailLabels = sheet.getRange("D4:D4").getValue(); 
    var driveFolder = sheet.getRange("D5:D5").getValue(); 
    var archiveLabel = sheet.getRange("D6:D6").getValue(); 
    var filetypes = sheet.getRange("D7:D7").getValue(); 

    var valid = filetypes.replace(/\s/g,"").toLowerCase().split(","); 
    var check = true; 

    if ((valid.indexOf("all") != -1) || (valid.length == 1 && valid[0] == "")) { 
    check = false; 
    } 

    var moveToLabel = getGmailLabel(archiveLabel); 

    var filter = createFilter(gmailLabels, archiveLabel); 
    var threads = GmailApp.search(filter, 0, 5); 
    var folder = getFolder(driveFolder); 

    sheet.getRange("D9:D9").setValue(sheet.getRange("D9:D9").getValue() + ", [th(" + threads.length + ")"); 

    for (var x=0; x<threads.length; x++) { 
    var message = threads[x].getMessages(); 
    sheet.getRange("D9:D9").setValue(sheet.getRange("D9:D9").getValue() + ", ms(" + message.length + ")");  
    for(var y=0; y<message.length; y++) { 
     var desc = message[y].getSubject() + " #" + message[y].getId(); 
     var att = message[y].getAttachments(); 

    //sheet.getRange("D9:D9").setValue(sheet.getRange("D9:D9").getValue() + ", at(" + att.length + ")");  
     for (var z=0; z<att.length; z++) { 
     try {   
      if (check) { 
      var name = att[z].getName(); 
      if (name.indexOf(".") != -1) { 
       var extn = name.substr(name.lastIndexOf(".")+1).toLowerCase(); 
       if (valid.indexOf(extn) != -1) { 
       file = folder.createFile(att[z]); 
       file.setDescription(desc); 
       } else { 
       Logger.log("Skipping " + name); 
       } 
      } 
      } else { 
      file = folder.createFile(att[z]); 
      file.setDescription(desc); 
      } 
     } 
     catch (e) { 
      Logger.log(e.toString()); 
     } 
     } 
    } 
    threads[x].moveToTrash(); 
    threads[x].addLabel(moveToLabel); 
    } 
    sheet.getRange("D9:D9").setValue(sheet.getRange("D9:D9").getValue() + "]"); 

} 


function configure() { 

    reset(true); 

    ScriptApp.newTrigger("sendToGoogleDrive").timeBased().everyMinutes(5).create(); 

    Browser.msgBox("Initialized", "The program is now running. You can close this sheet", Browser.Buttons.OK); 

} 

function init() { 
    return; 
} 

function onOpen() { 
    var menu = [  
    {name: "Help and Support »",functionName: "help"}, 
    null, 
    { name: "Step 1: Authorize", functionName: "init"  }, 
    { name: "Step 2: Run Program", functionName: "configure" }, 
    null, 
    { name: "Uninstall (Stop)", functionName: "reset"  }, 
    null, 
    {name: "Upgrade to Premium »",functionName: "premium"}, 
    null 
    ]; 
    SpreadsheetApp.getActiveSpreadsheet() 
    .addMenu("Gmail Attachments", menu); 
} 

function getFolder(parent) { 

    var parentFolder, searchFolder = DriveApp.getFoldersByName(parent); 

    if (searchFolder.hasNext()) { 
    parentFolder = searchFolder.next(); 
    } else { 
    parentFolder = DriveApp.createFolder(parent); 
    } 

    return parentFolder; 

} 


function getGmailLabel(name) { 

    var label = GmailApp.getUserLabelByName(name); 

    if (! label) { 

    label = GmailApp.createLabel(name); 

    } 

    return label; 

} 

function reset(e) { 

    var triggers = ScriptApp.getProjectTriggers(); 

    for (var i = 0; i < triggers.length; i++) { 
    ScriptApp.deleteTrigger(triggers[i]);  
    } 

    if (!e) { 
    Browser.msgBox("Script Stopped", "You can start the script anytime later!", Browser.Buttons.OK); 
    } 

} 

我的收件箱中有这些邮件:

1

问题是,然后我运行邮件有一个新的标签(现在我送剧本垃圾邮件“),但在下一次运行GmailApp.Search时,请查找已处理标签的邮件。

我复制配置表

2

回答

1

看起来你还没有定义moveToLabel,因此同一组的Gmail线程在每个循环得到处理。

在for循环之前添加此行。

var moveToLabel = GmailApp.getUserLabelByName("processed"); 

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

你可以在ctrlq.org得到完整的代码片段。