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

MailApp.sendEmail not working correctly when sending email with attachments from a paid account

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, 
      subject, 
      "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 保存到文件夹中。但是,当 spreadsheet/script 运行 脚本的所有者发送了一封电子邮件,但附加了 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 中进行一些更改 设置。您将需要设置别名电子邮件,AND/OR 确认您拥有的电子邮件地址。 您可以从 non-Google 电子邮件地址发送电子邮件,但您需要确认您拥有该电子邮件帐户。该确认过程在您的 Gmail 设置中的“帐户或帐户和导入”选项卡下启动。如果您有 Workspace 帐户,并且想以别名发送电子邮件,则需要打开 Workspace 管理控制台,

https://admin.google.com/AdminHome

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

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

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

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