【问题标题】:Gmail App Scripts: Attachments based on Google Drive URLGmail 应用脚本:基于 Google Drive URL 的附件
【发布时间】:2014-10-14 00:22:43
【问题描述】:

我正在使用在此处找到的邮件合并脚本,但我无法找到合适的类来附加文件(第 14 和 15 行)。

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 1;   // Number of rows to process
  // Fetch the range of cells A2:B2
  var dataRange = sheet.getRange(startRow, 1, numRows, 1)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddress = row[3];  // First column
    var message = row[10];       // Second column
    var subject = row[6];
    var attachment = Attachment.setUrl(row[11]);
    MailApp.sendEmail(emailAddress, subject, message, {attachments: attachment});
  }
}

我尝试了一些附件功能的变体,但每次都出现错误。这些行对应于 Google Sheet 中的列,row[11] 是 google drive 中图像的 URL。

【问题讨论】:

    标签: google-apps-script gmail google-sheets


    【解决方案1】:

    这是您的脚本的一个工作示例:您有 2 个错误:

    1. 范围定义只有一列
    2. 附件的参数应该是一个blob数组

    function sendEmails() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var startRow = 2;  // First row of data to process
      var numRows = 1;   // Number of rows to process
      // Fetch the range of cells A2:B12 since you use row[11], the data must at least be 12 cells wide
      var dataRange = sheet.getRange(startRow, 1, numRows, 12);
      // Fetch values for each row in the Range.
      var data = dataRange.getValues();
      for (i in data) {
        var row = data[i];
        var emailAddress = row[3];  // Fourth column
        var message = row[10];       // elevenths column
        var subject = row[6];
        var attachment = [UrlFetchApp.fetch(row[11]).getBlob()];
        MailApp.sendEmail(emailAddress, subject, message, {attachments: attachment});
      }
    }
    

    另请注意,url 必须有效并且文件必须公开共享:示例:

    https://drive.google.com/uc?export=view&id=0B3qSFd3iikE3TUFFLTc5MDE0MzkwLWQxYWItNDkwNy05ZjVkLWIyZDhiZDM4MjdmMg
    

    【讨论】:

      【解决方案2】:

      类似于 Serge insas 的回答,这是我在使用 UrlFetchApp.fetch 时绕过 401 错误所必须做的

      var fileUrl = row[11] // Based on OP's case
      
      var attachment = [
         UrlFetchApp.fetch(fileUrl, {
            headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() },
         }).getBlob(),
      ]
      
      MailApp.sendEmail(emailAddress, subject, message, {attachments: attachment});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 1970-01-01
        • 2022-10-16
        • 1970-01-01
        相关资源
        最近更新 更多