Google Scripts Sending email as plain text, not HTML

Viewed 350

Currently, when I send an email using the below script, the email will be formatted to start a new line after 70 characters. I believe this is because the email is being sent as plain text, not HTML.

How can I convert the message to HTML so that it reads better, without line breaks?

var data = dataRange.getValues();
for (var i in data) {
  var row = data[i];
  var emailAddress = row[3]; 
  var message = row[5] + "\n\nTEST\n\nTEST"; 
  var subject = row[4];

  MailApp.sendEmail(emailAddress, subject, message);
  sheet.getRange(startRow + i - 18, 8).setValue(EMAIL_SENT);
  sheetC.getRange(startRow + i - 18, 3).setValue(EMAIL_SENT);
  SpreadsheetApp.flush();
}

Fairly new to scripts, so any help would be appreciated!

1 Answers

Explanation:

Two things to note:

  1. You need to add an optional parameter which is the htmlBody:

    MailApp.sendEmail(emailAddress, subject, message,{htmlBody:message});

  2. Use your current solution and replace the \ns with <br> html tags:

    var message = message.replace(/\n/g, '<br>');

Minimal example:

function myFunction(){
    var emailAddress = "example@gmail.com"
    var message = "\n\nTEST\n\nTEST"; 
    var subject = "test";
    var message=message.replace(/\n/g, '<br>');
    MailApp.sendEmail(emailAddress, subject, message,{htmlBody:message});
  }

Solution:

  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var emailAddress = row[3]; 
    var message = row[5] + "\n\nTEST\n\nTEST"; 
    var message = message.replace(/\n/g, '<br>');
    var subject = row[4];
    MailApp.sendEmail(emailAddress, subject, message,{htmlBody:message});
    sheet.getRange(startRow + i - 18, 8).setValue(EMAIL_SENT);
    sheetC.getRange(startRow + i - 18, 3).setValue(EMAIL_SENT);
    SpreadsheetApp.flush();
  }
Related