从付费帐户发送带有附件的电子邮件时,MailApp.sendEmail无法正常工作

问题描述

function printForward() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheets()[3];
  // if you change the number,change it also in the parameters below
  var shName = sh.getName()
  var ssname = ss.getName();
  var length = ssname.length;
  var date = ssname.substring(0,length-15);
  const body = "All,<br><br>Attached is the invoice for the week of "+ date+"."+"<br><br> Thank you,<br> Elizabeth";
  
  sendSpreadsheetToPdf(3,shName,ss.getRange('Constants!T5').getValue(),"Invoices "+date,body,date);
}
function sendSpreadsheetToPdf(sheetNumber,pdfName,email,subject,htmlbody,invcdate) {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetId = spreadsheet.getId()  
  var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;  
  var url_base = spreadsheet.getUrl().replace(/edit$/,'');

  var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf

      + (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId)) 
      // following parameters are optional...
      + '&size=A4'      // paper size
      + '&portrait=true'    // orientation,false for landscape
      + '&fitw=true'        // fit to width,false for actual size
      + '&sheetnames=true&printtitle=false&pagenumbers=true'  //hide optional headers and footers
      + '&gridlines=false'  // hide gridlines
      + '&fzr=false';       // do not repeat row headers (frozen rows) on each page

  var options = {
    headers: {
      'Authorization': 'Bearer ' +  ScriptApp.getoAuthToken(),}
  }

  var response = UrlFetchApp.fetch(url_base + url_ext,options);
  var blob = response.getBlob().setName("Forward Air Invoice "+invcdate+ '.pdf');
  if (email) {
    var mailOptions = {
      attachments:blob,htmlBody:htmlbody
    }

MailApp.sendEmail(
      email,"html content only",mailOptions);
  }
  
  //save PDF
  const nameFile = "Forward " + invcdate + ".pdf";
  var forwardFolder = DriveApp.getFolderById(ID);
  forwardFolder.createFile(blob); //HERE IS WHERE THE PDF FILE IS SAVED

我有上面的代码,应该通过电子邮件发送电子表格的pdf,然后将pdf的副本保存在文件夹中。当我运行脚本时,电子邮件会正确发送,并且电子表格的pdf将保存到该文件夹​​中。但是,当电子表格/脚本的所有者运行脚本时,会发送电子邮件,但会附加html文件而不是pdf。因此,发送了一堆文本而不是电子表格。我不知道为什么会这样。

解决方法

附件必须位于数组中。也许尝试如下不同的配置:

MailApp.sendEmail(objectOfSettings);

代码:

var mailOptions = {};
var arrayOfAttachments = [];

if (blob) {
  arrayOfAttachments.push(blob);
  mailOptions.attachments = arrayOfAttachments;
}

if (htmlbody) {
  mailOptions.htmlBody = htmlbody;
}

if (email) {
  mailOptions.to = email;
  mailOptions.subject = subject;

  MailApp.sendEmail(mailOptions);
}

要使用FROM选项,您需要在Gmail中进行一些更改 设置。您将需要设置别名电子邮件,并且/或者确认您拥有的电子邮件地址。 您可以通过非Google电子邮件地址发送电子邮件,但需要确认您拥有该电子邮件帐户。该确认过程从您的Gmail设置中的“帐户或帐户和导入”标签下开始。如果您拥有Workspace帐户,并且想发送电子邮件作为别名,则需要打开Workspace管理控制台,

https://admin.google.com/AdminHome

  1. 以管理员身份登录。
  2. 转到应用> Google Apps> Gmail>高级设置。
  3. 搜索“允许每用户出站网关”并启用此设置。
  4. 单击“保存”按钮以保存更改。

返回主管理控制台 现在执行以下操作:

点击“用户” 点击用户帐户名称 添加一个别名。 这是一些Google帮助信息的链接。

https://support.google.com/mail/answer/22370?ctx=gmail&hl=en&authuser=0&visit_id=1-636221911743940259-3663359538&rd=1