【发布时间】:2021-05-20 18:56:45
【问题描述】:
我在一封电子邮件中收到多个文件。 我想将每个文件移动到 Google Drive 中的另一个文件夹。
我试过了,还是不行:
{ // example"
"filter": "has:attachment from:example@gmail.com",
"folder": "'example1'",
"filenameFromRegexp": "example1.*\.pdf$",
"folder": "'example2'",
"filenameFromRegexp": "example2.*\.pdf$"
}
感谢他们的帮助
原始 GitHub 项目: https://github.com/ahochsteger/gmail2gdrive
最小的、可重现的例子:
配置:
function getGmail2GDriveConfig() {
return {
// Global filter
"globalFilter": "-in:trash -in:drafts -in:spam",
// Gmail label for processed threads (will be created, if not existing):
"processedLabel": "to-gdrive/processed",
// Sleep time in milli seconds between processed messages:
"sleepTime": 100,
// Maximum script runtime in seconds (google scripts will be killed after 5 minutes):
"maxRuntime": 280,
// Only process message newer than (leave empty for no restriction; use d, m and y for day, month and year):
"newerThan": "1m",
// Timezone for date/time operations:
"timezone": "GMT",
// Processing rules:
"rules": [
{ // example"
"filter": "has:attachment from:example@gmail.com",
"folder": "'example1'",
"filenameFromRegexp": "example1.*\.pdf$",
"folder": "'example2'",
"filenameFromRegexp": "example2.*\.pdf$"
}
]
};
}
脚本:
function Gmail2GDrive() {
if (!GmailApp) return; // Skip script execution if GMail is currently not available (yes this happens from time to time and triggers spam emails!)
var config = getGmail2GDriveConfig();
var label = getOrCreateLabel(config.processedLabel);
var end, start, runTime;
start = new Date(); // Start timer
Logger.log("INFO: Starting mail attachment processing.");
if (config.globalFilter===undefined) {
config.globalFilter = "has:attachment -in:trash -in:drafts -in:spam";
}
// Iterate over all rules:
for (var ruleIdx=0; ruleIdx<config.rules.length; ruleIdx++) {
var rule = config.rules[ruleIdx];
var gSearchExp = config.globalFilter + " " + rule.filter + " -label:" + config.processedLabel;
if (config.newerThan != "") {
gSearchExp += " newer_than:" + config.newerThan;
}
var doArchive = rule.archive == true;
var doPDF = rule.saveThreadPDF == true;
// Process all threads matching the search expression:
var threads = GmailApp.search(gSearchExp);
Logger.log("INFO: Processing rule: "+gSearchExp);
for (var threadIdx=0; threadIdx<threads.length; threadIdx++) {
var thread = threads[threadIdx];
end = new Date();
runTime = (end.getTime() - start.getTime())/1000;
Logger.log("INFO: Processing thread: "+thread.getFirstMessageSubject() + " (runtime: " + runTime + "s/" + config.maxRuntime + "s)");
if (runTime >= config.maxRuntime) {
Logger.log("WARNING: Self terminating script after " + runTime + "s");
return;
}
【问题讨论】:
-
你是对的。为此,我链接到了 GitHub 项目。
-
如果您需要我的帮助,我不会点击非现场资源的链接,您必须发布您当前的代码并解释您遇到的问题。
-
脚本太长,网站不允许我上传:(
-
这就是我们需要minimal reproducible example 的原因。我们并不真正想要您的整个代码,我们只想要您遇到问题的部分。构建一段特殊的代码来突出您的独特问题总是更好。如果不想建立minimal reproducible example,那么我们可能会传递这个问题。
标签: google-apps-script google-drive-api gmail