我需要帮助从我的gmail收件箱中保存带有特定主题行“发票”的pdf附件。
我已经在网上搜索了代码,并得出以下结论,但在修改代码时遇到了挑战。理想情况下,th代码应该能够解析从任何发件人下载附件到gdrive的特定文件夹中查找“发票”一词的电子邮件主题。
我将感谢任何帮助修改代码。
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);
}
}
1条答案
按热度按时间idv4meu81#
您可以使用search()查找通过给定查询检索到的电子邮件。此查询与使用gmail界面完成的查询格式相同,因此您可以使用gmail搜索栏上的搜索选项创建相应的查询。例如
in:inbox subject:Invoice has:attachment label:unread
从收件箱返回主题中包含附件和“发票”一词的未读电子邮件。之后,您将浏览搜索返回的电子邮件线程以及每个线程中的消息。然后,获取附件并在目标文件夹中为每个附件创建一个文件。最后,您还可以选择将消息标记为已读,以便在多次运行脚本时不再对其进行处理。