【问题标题】:Google Apps Script: Saving Gmail Attachment to Google DriveGoogle Apps 脚本:将 Gmail 附件保存到 Google Drive
【发布时间】:2019-11-11 22:46:57
【问题描述】:

我非常接近完成我的 Google Apps 脚本项目,该项目正在解析一个简单的 2 行电子邮件并将附件链接(保存到 Google Drive 的附件)添加到 Google 表格。

我无法将电子邮件附件保存到 Google 云端硬盘。被注释掉的代码是不能正常工作的块。我举了一个例子:Save Gmail attachments on Google Drive -- 但它似乎对我不起作用。

附上我的完整代码。

function parseEmailMessages() {

  var threads = GmailApp.search('label:test',0,100);
  var sheet = SpreadsheetApp.openById('<<SHEET ID>>');
  var folder = DriveApp.getFolderById('<<FOLDER ID>>');
  var testLabel = GmailApp.getUserLabelByName('test');
  var doneLabel = GmailApp.getUserLabelByName('finished');

  for (var i = 0; i < threads.length; i++) {
    var message = threads[i].getMessages();
    for (var j in message) {
      var content = message[j].getPlainBody();

      /*
      var attachments = threads[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);
      }
      */

    }

    var [name, date] = content.split("\n");    

    function latestFile() {
      var gDriveFolder = DriveApp.getFolderById('<<FOLDER ID>>');
      var gDriveFile = gDriveFolder.getFiles();
      var lastFileId = gDriveFile.next().getId(); 
      return lastFileId.toString();
    }

    var urlStart = 'https://drive.google.com/a/<<DOMAIN>>/file/d/';
    var urlString = latestFile();
    var urlEnd = '/view?usp=drivesdk';    
    var pic = urlStart + urlString + urlEnd;

    sheet.appendRow([name,date,pic]);

    threads[i].removeLabel(testLabel);
    threads[i].addLabel(doneLabel);

  }
}

我收到的错误是:“TypeError: Cannot find function getAttachments in object GmailThread.”

确实 getAttachments 在文档中似乎不是 GmailThread 的一部分,但我目前不确定如何实现我的目标。

【问题讨论】:

    标签: javascript google-apps-script


    【解决方案1】:

    getAttachments() 不是类 GmailThread 的方法。那么下面的修改呢?

    发件人:

    var attachments = threads[j].getAttachments();
    

    收件人:

    var attachments = message[j].getAttachments();
    

    参考:

    如果这不是直接的解决方案,我深表歉意。

    【讨论】:

    • @dbr0wn11 欢迎。很高兴您的问题得到解决。
    【解决方案2】:
    var results = Gmail.Users.Messages.list(userId, {q: query});
    results.messages.forEach(function (m) {
        var msg = GmailApp.getMessageById(m.id);
        msg.getAttachments().forEach(function (a) {
            var fileName = a.getName();
            fileName = saveAttachmentToFolder(folder, a, fileName, msg.getDate(), input.tz);
        });
    });
    function saveAttachmentToFolder(folder, attachment, fileName, date, timezone) {
        if (timezone) {
            fileName = standardizeName(attachment, date, timezone);
        }
        Logger.log(fileName);
        folder.createFile(attachment.copyBlob()).setName(fileName);
        return fileName;
    }
    

    上面的代码 sn-p 来自我创建的一个 Gmail 插件,专门用于将附件保存到云端硬盘:https://github.com/ellaqezi/archiveByLabel/blob/main/Code.gs#L24

    label 字段中,您可以定义要在 Drive 中创建的嵌套目录,例如富/酒吧。

    query 字段中,您可以复制参数,就像在 Gmail 的搜索栏中使用它们一样。

    【讨论】:

      猜你喜欢
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      相关资源
      最近更新 更多