使用附件发送(getFileById)

问题描述 投票:0回答:1

我创建了一个带有脚本的Google表单,该脚本会在有人完成表单时自动将数据发送到特定的电子邮件。一切都运行良好,因为脚本做了它应该做的事情。

这是整个代码

function forwardEmail(e) {

  var forwardEmail = "[email protected]";

  var senderEmail = e.values[1];
  var senderName = e.values[2];
  var senderLocation = e.values[3];
  var senderType = e.values[9];

  var studentName = e.values[4];
  var broadLeafId = e.values[5];
  var cVueId = e.values[6];
  var studentCampus = e.values[10];

  var issueCategory = e.values[8];
  var description = e.values[7];

  var subject = "FS Support: " + issueCategory + " - " + studentName;  
  var message = "\n Response Summary: \n\n Sender Information: \n Contact Name: " + senderName + 
      "\n Contact Email: " + senderEmail + 
      "\n Location: " + senderLocation + 
      "\n Employee Type: " + senderType + 
      "\n\n Student Information: \n Student Name: " + studentName +   
      "\n BroadLeaf ID: " + broadLeafId +
      "\n CampusVue ID: " + cVueId +
      "\n Student Campus: " + studentCampus +
      "\n\n Incident Information: \n Issue Category: " + issueCategory +   
      "\n Comments: " + description + 

 MailApp.sendEmail(forwardEmail, subject, message);

上面的代码按原样运行。

现在,我想使用相同的表单/脚本来包含/发送附件。我从本教程https://www.youtube.com/watch?v=f2xPgUhcPqc得到了这个想法。我不希望使用特定ID分配“静态”文件,而是希望脚本获取随表单上传的文件的ID,并将其包含在同一封电子邮件中。所以我修改了脚本:

function forwardEmail(e) {

  var forwardEmail = "[email protected]";

  var senderEmail = e.values[1];
  var senderName = e.values[2];
  var senderLocation = e.values[3];
  var senderType = e.values[9];

  var studentName = e.values[4];
  var broadLeafId = e.values[5];
  var cVueId = e.values[6];
  var studentCampus = e.values[10];

  var issueCategory = e.values[8];
  var description = e.values[7];

  var fileUrl = e.values[11];
  var fileId = fileUrl.split('id=')[1];
  Logger.log(fileId)

  var subject = "FS Support: " + issueCategory + " - " + studentName;  
  var message = "\n Response Summary: \n\n Sender Information: \n Contact Name: " + senderName + 
      "\n Contact Email: " + senderEmail + 
      "\n Location: " + senderLocation + 
      "\n Employee Type: " + senderType + 
      "\n\n Student Information: \n Student Name: " + studentName +   
      "\n BroadLeaf ID: " + broadLeafId +
      "\n CampusVue ID: " + cVueId +
      "\n Student Campus: " + studentCampus +
      "\n\n Incident Information: \n Issue Category: " + issueCategory +   
      "\n Comments: " + description + 
      "\n\n Attachment: " + fileUrl + 
      "\n Google Doc ID: " + fileId;

  var attachment = DriveApp.getFileById(fileId);
  var attachment_type = attachment.getAs(MimeType.JPEG);

  MailApp.sendEmail(forwardEmail, subject, message, {attachments: [attachment_type]});

记录器部分工作,因为它能够提取ID,问题是它只是在我添加和修改此部分时停止发送电子邮件:

  var attachment = DriveApp.getFileById(fileId);
  var attachment_type = attachment.getAs(MimeType.JPEG);

  MailApp.sendEmail(forwardEmail, subject, message, {attachments: [attachment_type]});

有没有人知道如何使这项工作?我正在考虑做一个“时间驱动”的触发器(而不是“on form suhbmit”),以确保在发送电子邮件之前文件确实在Google云端硬盘中。

email google-apps-script google-form
1个回答
1
投票

试试这个:

var file = DriveApp.getFileById(FileId);

var blob = Utilities.newBlob('Insert any HTML content here', 'text/html', 'my_document.html');

MailApp.sendEmail('[email protected]', 'Attachment example', '', {
     attachments: [file.getAs(MimeType.JPEG), blob]});
© www.soinside.com 2019 - 2024. All rights reserved.