【问题标题】:MailApp.sendEmail not working correctly when sending email with attachments from a paid account从付费帐户发送带有附件的电子邮件时,MailApp.sendEmail 无法正常工作
【发布时间】:2020-10-06 22:19:11
【问题描述】:
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 会保存到文件夹中。但是,当电子表格/脚本的所有者运行脚本时,会发送一封电子邮件,但会附加一个 html 文件而不是 pdf。因此发送了一堆文本,而不是电子表格。我不知道为什么会这样。

【问题讨论】:

    标签: email google-apps-script email-attachments


    【解决方案1】:

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

    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

    【讨论】:

    • 感谢您的回复。我已经通过三封电子邮件尝试了您的解决方案。其中两个工作并且PDF正确发送。其中一个仍以 HTML 文档的形式发送,唯一的区别是该发件人的电子邮件地址是 G Suite 帐户(不是@gmail.com 地址)。这会影响脚本吗?
    • 如果 G Suite 帐户使用的是 Gmail 以外的其他电子邮件发送服务,我想知道该电子邮件服务对信息的解释是否不同。但这只是一个疯狂的猜测。您可以尝试不同的配置。查看更新的答案。
    • 另外,如果我想在 .sendEmail() 中添加一个“from”参数,我将如何在数组中执行此操作?我已经阅读了文档,我也对别名部分感到困惑。
    • “发件人”选项仅适用于付费帐户。免费/消费者帐户无法发送来自不同电子邮件地址的电子邮件。您是否尝试“从”消费者帐户发送?
    • 需要完成一个过程来设置和验证别名。请参阅底部的更新答案。用户将需要完成这些步骤。您无法使用我知道的代码自动执行此过程。
    猜你喜欢
    • 2014-11-23
    • 2019-05-22
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2017-06-11
    相关资源
    最近更新 更多