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