Google apps script 应用程序脚本保存上次邮件中的附件

Google apps script 应用程序脚本保存上次邮件中的附件,google-apps-script,gmail,email-attachments,Google Apps Script,Gmail,Email Attachments,我需要一些关于保存上次邮件附件的帮助。每天早上和晚上我都会收到自动邮件 我在网上找到了一个脚本,但它需要一些编辑。邮件在上午9点和下午4点到达,所以脚本必须只带上今天的最后一封信,并将附件保存在文件夹“GmailToDrive”中,替换旧文件 我只需要保存来自特殊发件人的邮件(一封邮件)。其他发件人的脚本已过期 你能帮我吗,我需要在这里更改或编辑什么?非常感谢,朋友们!) /* *注: *如果您需要任何付费助手,请写信给支持部门。waqar@gmail.com *我们以非常合理的价格提供应用程

我需要一些关于保存上次邮件附件的帮助。每天早上和晚上我都会收到自动邮件

我在网上找到了一个脚本,但它需要一些编辑。邮件在上午9点和下午4点到达,所以脚本必须只带上今天的最后一封信,并将附件保存在文件夹“GmailToDrive”中,替换旧文件

我只需要保存来自特殊发件人的邮件(一封邮件)。其他发件人的脚本已过期

你能帮我吗,我需要在这里更改或编辑什么?非常感谢,朋友们!)

/*
*注:
*如果您需要任何付费助手,请写信给支持部门。waqar@gmail.com
*我们以非常合理的价格提供应用程序脚本开发服务。
*/
//全球的
//要提取到驱动器的文件扩展名数组
var fileTypesToExtract=['gz'];
//google drive i中的文件夹名称,将放置哪些文件
var folderName='GmailToDrive';
//处理邮件消息后将应用的标签的名称
var labelName='GmailToDrive';
函数GmailToDrive(){
//构建查询以搜索电子邮件
var查询=“”;
//filename:jpg或filename:tif或filename:gif或filename:png或filename:bmp或filename:svg';//'after:'+formattedDate+
for(fileTypesToExtract中的变量i){
query+=(query==''?('filename:'+fileTypesToExtract[i]):('或filename:'+fileTypesToExtract[i]);
}
query='in:inbox有:nouserlabels'+query;
var threads=GmailApp.search(查询);
var label=GetgMillabel(labelName);
var父文件夹;
如果(螺纹长度>0){
parentFolder=getFolder(folderName);
}
var root=DriveApp.getRootFolder();
for(线程中的变量i){
var mesgs=threads[i].getMessages();
用于(在mesgs中为j值){
//获取附件
var attachments=mesgs[j].getAttachments();
for(附件中的变量k){
var附件=附件[k];
var isDefinedType=检查定义类型(附件);
如果(!isDefinedType)继续;
var attachmentBlob=attachment.copyBlob();
var file=DriveApp.createFile(attachmentBlob);
parentFolder.addFile(文件);
root.removeFile(文件);
}
}
线程[i]。添加标签(标签);
}
}
//此函数将获取Google drive中的父文件夹
函数getFolder(folderName){
var文件夹;
var fi=DriveApp.getFoldersByName(folderName);
if(fi.hasNext()){
folder=fi.next();
}
否则{
folder=DriveApp.createFolder(folderName);
}
返回文件夹;
}
//getDate n天以前
//n必须是整数
函数getDateNDaysBack(n){
n=parseInt(n);
变量日期=新日期();
date.setDate(date.getDate()-n);
return Utilities.formatDate(日期,Session.getScriptTimeZone(),'yyyy/MM/dd');
}
函数getgmailabel(名称){
var label=GmailApp.getUserLabelByName(名称);
如果(!标签){
label=GmailApp.createLabel(名称);
}
退货标签;
}
//此函数将检查filextension类型。
//并返回布尔值
功能检查定义类型(附件){
var fileName=attachment.getName();
var temp=fileName.split('.');
var fileExtension=temp[temp.length-1].toLowerCase();
if(fileTypesToExtract.indexOf(fileExtension)!=-1)返回true;
否则返回false;

}
在脚本下方编辑3行

  • 在查询[编辑]中添加您要签入的电子邮件,并仅添加过去24小时内收到的邮件
  • 添加if station以仅检查未读邮件(如果手动阅读,请将其放回未读状态,以便脚本正常工作)
  • 检查所有邮件时,将线程设置为已读

  • 您的代码遇到了什么特殊问题?你已经测试过了吗?这应该有助于你问题的替换方面:@Waxim Corp问题是这个脚本一直检查收件箱中的所有邮件,并将所有附件保存在Gmail文件夹中,但我只需要检查最后一封邮件,因为这可能是无止境的循环@MetaMan谢谢,我会在我任务的第一部分检查这个,但是现在我有很多未读的邮件,这将是一个很长的周期。请问我也可以在收到邮件的时候和吗?谢谢你的帮助!我用一个新的查询元素编辑了我的答案,以便只捕获过去24小时内收到的邮件。你可以在这里找到所有的Gmail搜索运营商:@Waxim Corp你是伟大的!非常感谢你!这是最好的办法!这个链接非常有用。我将研究这个问题。此脚本不会在保存时替换旧文件。如果我用upadte更改这个root.removeFile(文件),它会工作吗?
    function GmailToDrive(){
      var query = '';
      //filename:jpg OR filename:tif OR filename:gif OR fileName:png OR filename:bmp OR filename:svg'; //'after:'+formattedDate+
      for(var i in fileTypesToExtract){
        query += (query === '' ?('filename:'+fileTypesToExtract[i]) : (' OR filename:'+fileTypesToExtract[i]));
      }
    
      //ADD the only email adress you want to check + EDIT : only last 24h emails
      query = 'in:inbox has:nouserlabels ' + query + ' AND from:sender@sender AND newer_than:1d';
    
      var threads = GmailApp.search(query);
      var label = getGmailLabel_(labelName);
      var parentFolder;
      if(threads.length > 0){
        parentFolder = getFolder_(folderName);
      }
      var root = DriveApp.getRootFolder();
      for(var i in threads){
        var mesgs = threads[i].getMessages();
        for(var j in mesgs){
    
          //ADD: check if the mail is unread:
          if (mesgs[j].isUnread()) {
    
            var attachments = mesgs[j].getAttachments();
            for(var k in attachments){
              var attachment = attachments[k];
              var isDefinedType = checkIfDefinedType_(attachment);
              if(!isDefinedType) continue;
                var attachmentBlob = attachment.copyBlob();
                var file = DriveApp.createFile(attachmentBlob);
                parentFolder.addFile(file);
                root.removeFile(file);
              }
            }
    
          } // close if unread
        } // close for msg loop
    
        //ADD: Set thread (all mail included) as read
        GmailApp.markThreadRead(threads[i]);
    
        threads[i].addLabel(label);
      }
    }