Search code examples
htmlgoogle-apps-scriptgmail

Using Gmail Alias to Send HTML


I am using the following code to send a Google sheet-derived HTML table and some text via gmail. I can successfully send it from my 'default' subscriber account, but not from a functioning alias account.

I want to send it from that alias.

I know to implement GmailApp.getAliases();, I know what number the alias I want to use is, I just cannot get the HTML output into the email.

The closest I have come is just "object."

Any advice, suggested code, very welcome. Thank you!

 function getEmailHtml(appearanceData){
  var htmlTemplate = HtmlService.createTemplateFromFile("Template.html");
  htmlTemplate.appearance = appearanceData;
  var htmlBody = htmlTemplate.evaluate().getContent();
  return htmlBody;}

function sendEmail() {
  var appearanceData = getData();
  var body = getEmailText(appearanceData);
  var htmlBody = getEmailHtml(appearanceData);


MailApp.sendEmail({
    to: "[email protected]",
    cc: "[email protected]",
    subject: "XXX XXX XXX",
    body: body,
    htmlBody: htmlBody
      });

  function getEmailText(appearanceData) {
  var text = "";
  appearanceData.forEach(function(appearance) {
  text = text + appearance.client + "\n" + appearance.court + "\n" + appearance.date + "\n" + appearance.time + "\n" + appearance.charges + "\n" + appearance.notes +"\n" + appearance.phone +"\n-----------------------\n\n";
  });
  return text;
}

/**
 * @OnlyCurrentDoc
 */
function getData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var startRow = 2;  
  var startCol = 2; 
  var numRows = sheet.getLastRow()-1;  
  var numCols = 10; 


  sheet.getRange(startRow, startCol, numRows, numCols);

  var values = SpreadsheetApp.getActive().getSheetByName("Settings").getRange(startRow, startCol, numRows, numCols).getDisplayValues();
  values.shift(); //remove headers
  var appearances = [];
  values.forEach(function(value) {
    var appearance = {};
    appearance.client = value[0];
    appearance.court = value[1];
    appearance.date = value[2];
    appearance.time = value[3];
    appearance.charges = value[4];
    appearance.notes = value[5];
    appearance.phone = value[6];
    appearances.push(appearance);

     
  
})
Logger.log(JSON.stringify(appearances));
  return appearances;

}}


Solution

  • Have you tried using the GmailApp class instead of the MailApp class?

    I think you can use something like this:

    GmailApp.sendEmail(emailAddress, 'This is the subject of the email', 
                                     'Please see the body of the email.', {
        to: "[email protected]",
        cc: "[email protected]",
        subject: "XXX XXX XXX",
        body: body,
        from: aliases[0]
        name: "Sender Name", 
        htmlBody: htmlBody
          });
    

    I took as base the samples on the Google Documentation for getAliases() and sendEmail(recipient, subject, body, options).

    The issue was fixed with this change:

    GmailApp.sendEmail(
          "[email protected]",
          "Outlook",
           body,{
                cc: "[email protected]",
                from: "[email protected]",
                htmlBody: htmlBody,
              }
            );