问题描述
我需要一些帮助来保存上一封邮件的附件。每天早上和晚上,我都会收到自动发送的电子邮件。
我在网络上找到了一个脚本,但需要对其进行一些编辑。邮件在上午 9 点和下午 4 点发送,因此脚本必须仅获取今天的最后一封信,并将附件保存在文件夹“GmailToDrive”中并替换旧文件。
而且我只需要保存来自特殊发件人的邮件(一封邮件)。其他发件人没有脚本。
你能帮我吗,我需要在这里更改或编辑什么?非常感谢朋友们!)
/*
* Note:
* If you need any paid assistant,please write to support.waqar@gmail.com
* We provide Apps Script Development services at very reasonable price.
*/
// GLOBALS
//Array of file extension which you would like to extract to Drive
var fileTypestoExtract = ['gz'];
//Name of the folder in google drive i which files will be put
var folderName = 'GmailToDrive';
//Name of the label which will be applied after processing the mail message
var labelName = 'GmailToDrive';
function GmailToDrive(){
//build query to search emails
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]));
}
query = 'in:inBox has:nouserlabels ' + query;
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){
//get attachments
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);
}
}
threads[i].addLabel(label);
}
}
//This function will get the parent folder in Google drive
function getFolder_(folderName){
var folder;
var fi = DriveApp.getFoldersByName(folderName);
if(fi.hasNext()){
folder = fi.next();
}
else{
folder = DriveApp.createFolder(folderName);
}
return folder;
}
//getDate n days back
// n must be integer
function getDateNDaysBack_(n){
n = parseInt(n);
var date = new Date();
date.setDate(date.getDate() - n);
return Utilities.formatDate(date,Session.getScriptTimeZone(),'yyyy/MM/dd');
}
function getGmailLabel_(name){
var label = GmailApp.getUserLabelByName(name);
if(!label){
label = GmailApp.createLabel(name);
}
return label;
}
//this function will check for filextension type.
// and return boolean
function checkIfDefinedType_(attachment){
var fileName = attachment.getName();
var temp = fileName.split('.');
var fileExtension = temp[temp.length-1].toLowerCase();
if(fileTypestoExtract.indexOf(fileExtension) !== -1) return true;
else return false;
}
我明白,我终于可以在编辑后在上午 9 点和下午 4 点之后按时触发)))
解决方法
在编辑了 3 行的脚本下方。
- 在查询中添加您要检查的电子邮件 [EDIT] 并且仅在过去 24 小时内收到邮件
- 添加 if 语句以仅检查未读邮件(如果您手动阅读,请将其恢复为未读状态以使脚本工作)
- 在检查所有邮件时将线程设置为已读
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);
}
}