保存了错误的文件-编写脚本将gmail附件保存到google drive

保存了错误的文件-编写脚本将gmail附件保存到google drive,gmail,google-drive-api,attachment,Gmail,Google Drive Api,Attachment,我正在使用一个改编自Amit Agarwal的脚本文件将我的gmail附件发送到google drive 我有一个大约100人的团队,每个人都以MS excel格式向我发送了一份周报文件作为附件。这些电子邮件首先标记为“每周”,脚本文件将通过将附件保存到google drive来处理每封邮件。完成后,电子邮件将标记为“已保存” 它在大多数情况下都能很好地工作,但是当保存过时的周报而不是最新的周报时,每周我会有4到10次发病率 这太奇怪了 function sendToGoogleDrive()

我正在使用一个改编自Amit Agarwal的脚本文件将我的gmail附件发送到google drive

我有一个大约100人的团队,每个人都以MS excel格式向我发送了一份周报文件作为附件。这些电子邮件首先标记为“每周”,脚本文件将通过将附件保存到google drive来处理每封邮件。完成后,电子邮件将标记为“已保存”

它在大多数情况下都能很好地工作,但是当保存过时的周报而不是最新的周报时,每周我会有4到10次发病率

这太奇怪了

function sendToGoogleDrive() { 

  var gmailLabels  = "Weekly";  
  var driveFolder  = "Weekly Report";  
  var archiveLabel = "Saved";

  var moveToLabel =  GmailApp.getUserLabelByName(archiveLabel);

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

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

  var threads = GmailApp.search(filter, 0, 5);  

  var folder = DriveApp.getFoldersByName(driveFolder);

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

  for (var x=0; x<threads.length; x++) {

    var message = threads[x].getMessages()[0];

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

    for (var z=0; z<att.length; z++) {
      try {
        var file = folder.createFile(att[z]);
        file.setDescription(desc);

        var oldFilename = file.getName();
        var newFilename = (Utilities.formatDate(message.getDate(), "GMT+8", "yyyy-MM-dd'T'HH:mm:ss'Z'") + " " + oldFilename); 

        file.makeCopy(newFilename);
      }
      catch (e) {
        Logger.log(e.toString());
      }
    }

    threads[x].addLabel(moveToLabel);    
  }

}
函数sendtogledrive(){
var gmailabels=“每周”;
var driveFolder=“每周报告”;
var archiveLabel=“已保存”;
var moveToLabel=GmailApp.getUserLabelByName(archiveLabel);
如果(!moveToLabel){
moveToLabel=GmailApp.createLabel(archiveLabel);
}
var filter=“has:附件-标签:“+archiveLabel+”标签:“+gmillabels;
var threads=GmailApp.search(过滤器,0,5);
var folder=DriveApp.getFoldersByName(driveFolder);
if(folder.hasNext()){
folder=folder.next();
}否则{
folder=DriveApp.createFolder(driveFolder);
}

对于(var x=0;x脚本对我来说很好。您可能应该在电子表格中记录所有内容,包括邮件主题、id和附件详细信息,以确定保存副本的原因。@AmitAgarwal感谢您注意到这一点并提供帮助!我找到了一个新线索,请发表意见。再次感谢您的关注。@AmitAgar这似乎是由于gmail的对话模式造成的。每当一条消息在对话中,即“引用:”中列出的多个线程:,则它将保存错误的附件。否则,如果邮件本身不属于对话,则效果良好。虽然我已关闭了对话模式,但问题仍然存在。即使您在Gmail中禁用对话模式,也不会影响谷歌脚本,因为它仍会以线程方式读取电子邮件。@AmitAgarwal有什么解决方法吗?
.......
Subject: =?GB2312?B?d2Vla2x5IHJlcG9ydC24tb31z7w=?=
References: <201409191817238757191@bekencorp.com>, 
    <2014092618170700047620@bekencorp.com>, 
    <201412051803001092350@bekencorp.com>, 
    <201412121802092504091@bekencorp.com>, 
    <2014123117571921868416@bekencorp.com>, 
    <2015010912141701588718@bekencorp.com>, 
    <201501161011295938041@bekencorp.com>
X-Priority: 3
X-GUID: F196F58C-CD93-4EC3-BAEB-0987910BB9DB
X-Has-Attach: yes
X-Mailer: Foxmail 7, 2, 6, 37[cn]
Mime-Version: 1.0
Message-ID: <2015012318020417198016@bekencorp.com>
.......