【问题标题】:Two files for different folders in gmail2gdrive scriptgmail2gdrive 脚本中不同文件夹的两个文件
【发布时间】: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;
      }

【问题讨论】:

  • 对象和minimal reproducible example有区别
  • 你是对的。为此,我链接到了 GitHub 项目。
  • 如果您需要我的帮助,我不会点击非现场资源的链接,您必须发布您当前的代码并解释您遇到的问题。
  • 脚本太长,网站不允许我上传:(
  • 这就是我们需要minimal reproducible example 的原因。我们并不真正想要您的整个代码,我们只想要您遇到问题的部分。构建一段特殊的代码来突出您的独特问题总是更好。如果不想建立minimal reproducible example,那么我们可能会传递这个问题。

标签: google-apps-script google-drive-api gmail


【解决方案1】:

您尝试做的事情并不复杂。这是一个简单的示例,其中我从刚刚创建的电子邮件中复制了几个文件。它在两个文件夹之一之间交替,但你可以做任何你想做的事情。

function getAttachments() {
  const fldrids =['id1','id2'];
  const threads = GmailApp.getInboxThreads();
  threads.forEach(t=>{
    let msgs = t.getMessages();
    msgs.forEach(m=>{
      let sub = m.getSubject();
      let arr = m.getAttachments();
      if(arr.length) {
        arr.forEach((f,i)=>{
          let s =f.getDataAsString();
          let n = f.getName();
          DriveApp.getFolderById(fldrids[i%2]).createFile(n,s);
        });
      }
    });
  });
}

【讨论】:

    猜你喜欢
    • 2016-02-25
    • 2013-11-22
    • 2023-03-20
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2022-08-14
    相关资源
    最近更新 更多