Я скопировал несколько кодов, чтобы переместить вложения Gmail на Google Диск, добавить метку к почте, затем удалить или заархивировать почту (я пробовал и корзину, и архив, но результаты совпадают):
- Входящие письма приходят от одного и того же отправителя (устройства) каждый раз с одним и тем же субъектом.
- Письмо приходит в произвольное время, это может быть несколько писем в минуту или ничего за несколько часов.
- Имена файлов имеют суффикс в формате гггг-мм-дд-чч-мм-сс.
Проблема, с которой я сталкиваюсь, заключается в том, что когда скрипт обрабатывает новые электронные письма в папке входящих сообщений, он такжеобрабатывает тех, кто в корзине.Это приводит к дублированию старых файлов.Та же проблема возникает, даже если я изменяю moveToTrash()
на moveToArchive()
.
Как я могу запретить моему сценарию дублировать старые файлы (из ранее обработанных писем)?
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:jpeg'; //'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();
mesgs.reverse();
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);
threads[i].moveToTrash();
threads[i].refresh();
}
}