无法在MailApp.sendEmail中附加多个Blob对象作为附件

时间:2017-06-10 13:19:51

标签: google-apps-script

我正在创建一个转换文档并发送电子邮件的google-app脚本。

我创建了两个功能,一个用于将Google文档转换为Microsoft Word,另一个用于将Google表格转换为Microsoft Excel。这两个函数都成功返回Blob对象。

我已经能够使用记录的MailApp.sendEmail函数发送单个blob。但是当我尝试在同一封电子邮件中发送两个blob时,我一直遇到无效的参数错误。

我的脚本是:

    //Convert Google Sheet page to Microsoft Excel Document, return BLOB
    function convert2Excel(docID) {

  var file          = DriveApp.getFileById(docID);
  var url           = 
  "https://docs.google.com/spreadsheets/d/"+docID+"/export?forma‌t=xlsx";
  var token         = ScriptApp.getOAuthToken();
  var response      = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' +  token
    }
  });

  var fileName = file.getName() + '.xlsx';
  return [response.getBlob().setName(fileName)];

};

//Convert Google Doc page to Microsoft Word Document, return BLOB for emailing
function convert2Word(docID){

  var file       = DriveApp.getFileById(docID);
  var url        = "https://docs.google.com/document/d/"+docID+"/export?forma‌t=docx";
  var token      = ScriptApp.getOAuthToken();
  var response   = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' +  token
    }
  });
  var fileName = file.getName() + '.docx';
  return [response.getBlob().setName(fileName)];

 };

//Send email with attachments
function sendEmail(att1,att2){
MailApp.sendEmail('email@email.com', 'The Subject', 'A Message', {attachments: [att1, att2]});
};

var att1=convert2Excel('sheetID string');
var att2=convert2Word('docID string');
sendEmail(att1,att2);

根据文档,这应该可行,但我无法使多个blob对象工作。

1 个答案:

答案 0 :(得分:0)

您的代码不使用2个附件的原因是您将数组数组传递给attachments的{​​{1}}参数()

有两种方法可以让您的代码正常运行。行:.sendMail通过返回方括号内的blob,您实际上返回一个包含blob的数组。您可以在调试器中看到这一点:enter image description here

从行return [response.getBlob().setName(fileName)];中删除方括号以返回实际的blob。在调试器中:enter image description here

或者,您可以保留方括号并将return [response.getBlob().setName(fileName)];添加到[0]att1att2上,如下所示:MailApp.sendEmail('email@email.com', 'The Subject', 'A Message', {attachments: [att1, att2]}); };