【发布时间】:2019-04-01 16:39:28
【问题描述】:
我想将特定电子邮件中的 gmail 附件(.pdf 文件)保存到特定的 Google 云端硬盘文件夹中。我还需要使用由电子邮件的某些字符串组成的字符串重命名文件。
我使用带有一些功能的 Google Apps 脚本开发了一个简单的脚本。
这是我写的主要函数:
function GmailToDrive() {
var query = '';
query = 'in:inbox from:noreply@agyo.io has:nouserlabels ';
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();
var message_body = mesgs[j].getBody();
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);
file.setName(renameFile_(attachment, message_body))
parentFolder.addFile(file);
root.removeFile(file);
}
}
threads[i].addLabel(label);
}
}
checkIfDefinedType_(attachment) 函数检查附件是否为 .pdf 文件,renameFile_(attachment, message_body) 重命名附件并从电子邮件中提取一些字符串。
脚本似乎已正确开发,但有时我的 google 驱动器文件夹中保存了两个或多个相同的附件。
【问题讨论】:
-
欢迎。 “但有时我的 google drive 文件夹中保存了两个或多个相同的附件。”我不明白这是什么意思;你能更详细地解释一下吗?此外,
GmailToDrive的代码是众所周知且可靠的,但我不记得见过额外的代码行file.setName(renameFile_(attachment, message_body));请提供此功能的代码。 -
该脚本根据查询参数扫描所有Gmail项目,并且必须将未标记邮件的附件保存到Google Drive。该脚本每 30 分钟运行一次,有时某些附件会多次保存在 Google Drive 文件夹中。
-
file.setName是 Class File (developers.google.com/apps-script/reference/drive/file) 的 Google App Script 函数。该函数的参数是由函数renameFile_(attachment, message_body)获得的字符串,该函数从电子邮件文本中提取一些字符串并将它们连接成单个字符串 -
“有时某些附件会多次保存在 Google Drive 文件夹中”。那么问题是什么?代码应该查找重复项而不是两次处理它们?甚至可以删除重复项?
-
该脚本仅在没有用户标签并保存附件的情况下处理所有 Gmail 邮件。我不明白为什么脚本会再次处理标记的邮件并再次保存附件。我们可以考虑“重复控制”处理后添加到mal的标签。可能是我把一些条件放错了地方……
标签: javascript google-apps-script