【问题标题】:How to send a HTML email with attachment using MailApp in Google Apps Script?如何在 Google Apps 脚本中使用 MailApp 发送带有附件的 HTML 电子邮件?
【发布时间】:2020-05-29 22:51:50
【问题描述】:

我正在尝试在 Google Apps 脚本中编写代码,以向我的联系人列表发送带有附件的 HTML 电子邮件。 我收到的主要错误是

    MailApp.sendEmail(
    emailid[i], 
    "test email",
    Message,
    htmlBody: HtmlMessage,
    attachments: [file.getAs(MimeType.PDF)]
    );

错误与htmlBody: HtmlMessage 相关:SyntaxError: missing) 在参数列表(第 48 行,文件“Code.gs”)之后

我在网上试过其他方法,包括

    MailApp.sendEmail({
    to: emailid[i],
    subject: "This is a test email",
    htmlBody: HtmlMessage,
    attachments: [file.getAs(MimeType.PDF)]  
  });

我收到错误:异常:无效电子邮件:[Ljava.lang.Object;@1456304b(第 51 行,文件“代码”)

整个代码:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();

  //BASIC DETAILS
  var name = sheet.getRange(1, 1, 3).getValues();
  var emailid = sheet.getRange(1, 2, 3).getValues();
  var company = sheet.getRange(1, 3, 3).getValues();

  //ATTACHMENTS
  var file = DriveApp.getFileById('XXXXXXXXXXXXXXXXX').getAs('application/pdf').setName('XXXX.pdf');

  //HTML
  var HtmlOutput = HtmlService.createHtmlOutputFromFile('html');
  var HtmlMessage = HtmlOutput.getContent();

  //PLAIN TEXT
  var Message = 
    "Dear <?= name ?>,"+"\n"+
    "XXXXXXXXXXXXXxXXXX"+"\n"+
    "XXXXXXXXXXXX <?= company ?> XXXXXXXXXXXXXXXXXXX"+"\n"+
    "XXXX Link: https://www.XXXX/XXXX"+"\n"+
    "XXXX."+"\n"+
    "With Warm Regards,"+"\n"+
    "XXX"+"\n"+
    "Call: XXXXX"+"\n"+
    "Email: XXXX"+"\n";
  var OriginalMessage = Message;
  var OriginalHtmlMessage = HtmlMessage;

  for( var i = 0 ; i <= 2 ; i++)
  {
    Message = Message.replace("<?= name ?>", name[i]);
    Message = Message.replace("<?= company ?>", company[i]);

    HtmlMessage = HtmlMessage.replace("%name", name[i]);
    HtmlMessage = HtmlMessage.replace("%company", company[i]);

    MailApp.sendEmail(
    emailid[i], 
    "test email",
    Message,
    htmlBody: HtmlMessage,
    attachments: [file.getAs(MimeType.PDF), blob]
    );

    Message = OriginalMessage;
    HtmlMessage = OriginalHtmlMessage;
  }
}

这是 HTML 文件:

<!DOCTYPE html>
<html>

<head>
    <base target="_top">
</head>

<body style="font-family: 'Times New Roman', Times, serif;font-size: 1.5em; padding: 5%;">
    Dear %name,<br>
    <div style="line-height: 2;margin-left:5%;">
        XXXX  XXXXXX XXXXXXX XXXXXXX XXXXXXXX XXXX.<br>
        XXXX  XXXXXX XXXXX %company XXXXXXXX XXXXXXXX XXXXX. <br>
        XXXX  XXXXXX XXXXX: <a href="https://www.XXXX">Link</a><br>
        I XXXXXX XXXX  XXXXX<br></div>
    <div style="line-height: 1.5; padding: 5%;">
        With Warm Regards,<br>
        <b>XXXXx</b><br>
        <a href="tel:+XX-XXXXX">Call: +XX-XXXXX</a><br>
        <a href="mailto:XX@XXXXXX.com">Email: XX@XXXXXX.com</a><br></div>
</body>

</html>

MailApp.SendMail()的参数应该如何放置?

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-api


    【解决方案1】:

    方法语法为sendEmail(recipient, subject, body, options)

    attachmentshtmlBody 都是 optionsoptions

    一个指定高级参数的 JavaScript 对象

    所以您需要将options 作为带有键值对的 JSON 对象传递:

      MailApp.sendEmail(
        emailid[i][0], 
        "test email",
        Message,
        {
          htmlBody: HtmlMessage,
          attachments: [file.getAs(MimeType.PDF)]
        }
      );
    

    【讨论】:

    • 我以前试过。我得到 Exception: The parameters (number[],String,String,(class)) 与 MailApp.sendEmail 的方法签名不匹配。
    • 这是因为这些值存在一些问题 - 它们不是所需的数据类型。它应该是emailid[i][0] 而不是emailid[i](值,而不是数组)。还要检查您的 html 输出和文件是否正确。
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多