0
votes

I'm trying write code in Google Apps Script to send a HTML email with an attachment to a list of my contacts. The main error I recieve is with the line

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

The error is with reference to htmlBody: HtmlMessage : SyntaxError: missing ) after argument list (line 48, file "Code.gs")

I have tried other methods online including

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

I get the error : Exception: Invalid email: [Ljava.lang.Object;@1456304b (line 51, file "Code")

The entire Code :

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;
  }
}

Here is the HTML File :

<!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>

How should the parameters for MailApp.SendMail() be placed?

1

1 Answers

0
votes

The method syntax is sendEmail(recipient, subject, body, options)

whereby both attachments and htmlBody are options and options are

a JavaScript object that specifies advanced parameters

So you need to pass the options as a JSON object with key-value pairs:

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