在 GAS/Javascript 中保存带有特定主题行的 Gmail 附件
Posted
技术标签:
【中文标题】在 GAS/Javascript 中保存带有特定主题行的 Gmail 附件【英文标题】:Save Gmail attachments with specific subject line in GAS/Javascript 【发布时间】:2021-09-19 13:32:27 【问题描述】:我需要帮助来保存我的 Gmail 收件箱中带有特定主题行“发票”的 pdf 附件。
我在网上搜索了代码并得出以下结论,但在修改它时遇到了挑战。理想情况下,该代码应该能够解析从任何发件人下载附件到 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】:您可以使用search() 来查找通过给定查询检索到的电子邮件。此查询与使用 Gmail 界面完成的查询格式相同,因此您可以使用 Gmail 搜索栏上的搜索选项来创建适当的查询。例如,in:inbox subject:Invoice has:attachment label:unread
从收件箱返回未读电子邮件,其中包含附件和主题中包含单词 Invoice。
之后,您将浏览搜索和messages in each thread 返回的电子邮件线程。然后,你 get the attachments 和 create a file in the destination folder 为他们每个人。 (可选)最后,您可以mark the message as read,这样如果您多次运行脚本,它就不会再次被处理。
function saveAttachmentsTest()
const destinationFolderId = 'ABC123';
const folder = DriveApp.getFolderById(destinationFolderId);
const emails = GmailApp.search('in:inbox subject:Invoice has:attachment label:unread');
for (const email of emails)
for (const message of email.getMessages())
for (const attachment of message.getAttachments())
folder.createFile(attachment);
message.markRead();
【讨论】:
以上是关于在 GAS/Javascript 中保存带有特定主题行的 Gmail 附件的主要内容,如果未能解决你的问题,请参考以下文章
Outlook - 从带有 .xls 附件的电子邮件和特定发件人中保存文件,然后将电子邮件移动到子文件夹
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller